[TOC] > [phpredis中文手册](http://www.cnblogs.com/ikodota/archive/2012/03/05/php_redis_cn.html) > [php操作Redis-简书](https://www.jianshu.com/p/02d4d3f91e73) ## 安装 `choco install redis` php 安装redis 模块 [参考网址](https://segmentfault.com/a/1190000011725819) ### 5.6 nts-版 [php_redis模块](https://windows.php.net/downloads/pecl/releases/redis/2.2.7/php_redis-2.2.7-5.6-nts-vc11-x86.zip) [php_igbinary 模块](https://windows.php.net/downloads/pecl/releases/igbinary/2.0.1/php_igbinary-2.0.1-5.6-nts-vc11-x86.zip) ## 开启 ``` //进入目录 cd C:\Program Files\Redis //开启 没有报错则说明成功 redis-server.exe conf/redis.conf ``` ## 命令中测试 打开新命令行窗口 ``` //连接 redis-cli.exe -h 127.0.0.1 -p 6379 //赋值 set test "hello word" //取值 get test ``` ## 接口 ``` $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->ping() //输出PONG 为正常 ,错误会报 RedisException 异常 ``` ### set/get/ setnx / getset ``` //字符串操作 $redis->set("tutorial-name", "Redis tutorial"); $redis->get("tutorial-name"); $redis->setnx('key', 'value'); //不存在则fasle ,存在则 true $redis->delete("tutorial-name"); ``` ### getset 先获得key的值,然后重新赋值 ``` $redis->set("tutorial-name", "Redis tutorial"); $redis->getset('tutorial-name', 'Redis'); //Redis tutorial ``` ### mset 存入多个值 key/value ``` //存入多个值 $array_mset=array('first_key'=>'first_val', 'second_key'=>'second_val', 'third_key'=>'third_val' ); $redis->mset($array_mset); #用MSET一次储存多个值 print_r($redis->get('third_key')); // third_val ``` ### mget 获取多个 key 对应的 value ``` $redis->set("key1", "1"); $redis->set("key2", "2"); var_export($redis->mget(["key1","key2"])); /** * array ( 0 => '1', 1 => '2', )*/ ``` ### lpush / lrange / Len 队列存储 /列表长度 ``` //向右追加 $redis->rPush("tutorial-list", "Redis",'Oracle'); $redis->rPush("tutorial-list", "Mongodb"); $redis->rPush("tutorial-list", "Mysql"); print_r($redis->lPop("tutorial-list")); //先进后出 $arList = $redis->lrange("tutorial-list",0,0); //取第一个 $arList = $redis->lrange("tutorial-list",0,-1); //取全部 print_r($redis->lLen("tutorial-list")); //3 print_r($arList); //数组形式的值 ``` ### keys 获取所有的 key ``` //获取key值 $arList = $redis->keys("*"); print_r($arList); // 数组形式 Array ( [0] => tutorial-list [1] => tutorial-name ) ``` ### setex / ttl /persist 设置一个有效期的值 /移除有效期 ``` $redis->setex("count", 5, "123"); // $redis->persist('count'); //移除失效时间 while(true){ $data = $redis->get("count"); if ($data){ print_r($redis->ttl("count")."\n"); //查看失效倒计时 print_r($data."\n"); }else{ return true; } sleep(1); } ``` ### expire 设置失效时间 `$redis->expire('key', 10); //设置失效时间[true | false]` ### strlen 字符串长度 ``` $redis->set("name", 123); print_r($redis->strlen("name")); //3 ``` ### incr / incrby / decr /decrby 自增自减 ``` $redis->set("name", 123); $redis->incr("name",2); print_r($redis->get("name")); //125 ``` ### del / delete 清空队列或 set ``` $redis->del(["key1","key2"]); $redis->delete("key1","key2"); ``` ### select / move 切换数据库 移动数据 默认为 16 可在配置文件中修改 ``` $redis->select(0); // switch to DB 0 $redis->set('x', '42'); // write 42 to x $redis->move('x', 1); // move to DB 1 $redis->select(1); // switch to DB 1 $redis->get('x'); // will return 42 ``` ### Hash 接口 ``` $redis->hset('key', 'field', 'value'); //增,改,将哈希表key中的域field的值设为value, 不存在创建, 存在就覆盖【1 | 0】 $redis->hget('key', 'field'); //查,取值【value|false】 $arr = array('one'=>1, 2, 3);$arr2 = array('one', 0, 1); $redis->hmset('key', $arr); //增,改,设置多值$arr为(索引|关联)数组, $arr[key]=field, [ true ] $redis->hmget('key', $arr2); //查,获取指定下标的field,[$arr | false] $redis->hgetall('key'); //查,返回哈希表key中的所有域和值。[当key不存在时,返回一个空表] $redis->hkeys('key'); //查,返回哈希表key中的所有域。[当key不存在时,返回一个空表] $redis->hvals('key'); //查,返回哈希表key中的所有值。[当key不存在时,返回一个空表] $redis->hdel('key', $arr2); //删,删除指定下标的field, 不存在的域将被忽略, [num | false] ``` ### Set 元祖,key列表中的值都是唯一且无序 ``` $redis->sRem('key', 'value1', 'value2', 'value1'); //删,移除集合key中的一个或多个member元素,不存在的member元素会被忽略 [del_num | false] $redis->sMembers('key'); //查,返回集合key中的所有成员 [array | ''] $redis->sIsMember('key', 'member'); //是否存在 $redis->sPop('key'); // 移除并返回集合中的一个随机元素 [member | false] $redis->sRandMember('key'); //查,返回集合中的一个随机元素 [member | false] $redis->sInter('key1', 'key2', 'keyn'); //查看多个 key 的交集的值 [array | false] $redis->sUnion('key1', 'key2', 'keyn'); //查看多个 key 合集 [array | false] $redis->sDiff('key1', 'key2', 'keyn'); //差差集 [array | false] ``` ## Zet 带顺序的 set ``` $redis->delete("z"); $redis->zAdd('z', 1, 'v2', 2, 'v2', 3, 'v3', 4, 'v4' ); $redis->zRem('z', 'v2', 'v3'); // $redis->zAdd("z", 3, "v5"); $redis->zAdd("z", 7, "v5"); //此赋值无效 $redis->zAdd("z", 3, "v6"); $redis->zAdd("z", 5, "v7"); var_export($redis->zRange("z", 0, -1)); // array ( 0 => 'v5', 1 => 'v6', 2 => 'v4', ) var_dump($redis->zScore('z', 'v5')); // 3 //var_dump($redis->zScore('z', 'v6')); // 3 var_export($redis->zRevRange('z', 0, -1)); // 返回从大到小 var_export($redis->zRangeByScore('z', 0, 4));//查排 0 到 4 的 value array ( 0 => 'v5', 1 => 'v6', ) var_export($redis->zRangeByScore('z', 0, 4,['withscores' => TRUE]));//array ( 'v5' => 3.0, 'v6' => 3.0, 'v4' => 4.0, ) var_export($redis->zRangeByScore('z', 0, 4,['limit' => [0, 1]]));// 分页 array ( 0 => 'v5',) //$redis->zRevRangeByScore('z', $max, $min,[$config]); //从大到小排 var_dump($redis->zRank('z', 'v4')); //查,在全部排序中的 从开数起的索引 //$redis->zRevRank('key', 'member'); //反向查找 ``` ## 服务 接口 ``` $redis->dbSize(); //返回当前库中的key的个数 $redis->flushAll(); //清空整个redis[总true] $redis->flushDB(); //清空当前redis库[总true] $redis->save(); //同步??把数据存储到磁盘-dump.rdb[true] $redis->bgsave(); //异步??把数据存储到磁盘-dump.rdb[true] $redis->info(); //查询当前redis的状态 [verson:2.4.5....] $redis->lastSave(); //上次存储时间key的时间[timestamp] $redis->multi(Redis::MULTI); //开启事务,事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令在一个原子时间内执行。 $redis->multi(Redis::PIPELINE); //开启管道,事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令在一个原子时间内执行。 $redis->exec(); //执行所有事务块内的命令,;【事务块内所有命令的返回值,按命令执行的先后顺序排列,当操作被打断时,返回空值 false】 ```