php redis的学习记录
redis服务端安装(环境linux+php7)
windows版redis下载地址 https://github.com/MicrosoftArchive/redis/releases
运行windows版本redis报如下错误:
C:\Program Files\Redis>redis-server.exe redis.windows.conf [10924] 20 Jun 16:36:01.148 # Creating Server TCP listening socket *:6379: bind: Unknown error |
执行以下命令即可解决以上问题.
C:\Program Files\Redis>redis-cli.exe 127.0.0.1:6379> shutdown not connected> exit |
官网下载地址 https://redis.io/download
①wget http://download.redis.io/releases/redis-5.0.3.tar.gz
②tar zxvf redis-5.0.3.tar.gz
③cd redis-5.0.3
④make
⑤cd src
⑥make install
redis配置文件位置
/usr/local/src/redis-5.0.3/redis.conf
执行redis相关程序
/usr/local/src/redis-5.0.3/src/redis-server
vi redis.conf,将daemonize属性改为yes(表明需要在后台运行),按ESC进入Command模式,然后输入“:wq”,回车就可以保存并退出了
/usr/local/src/redis-5.0.3/src/redis-server /usr/local/src/redis-5.0.3/redis.conf
参考地址:https://www.cnblogs.com/wangchunniu1314/p/6339416.html
配置文件设置
放开所有ip访问 bind 0.0.0.0
设置密码 requirepass foobared
php redis扩展安装
php redis扩展地址:http://pecl.php.net/package/redis
比较简单,暂时省略。
windows下启动redis服务端
redis-server.exe redis.conf |
windows下启动redis客户端
redis-cli.exe |
redis连接
$redis = new Redis(); //短链接,本地host,端口为6379,超过20秒放弃链接 $redis->connect('127.0.0.1', 6379,20); echo "Connection to server sucessfully"; //查看服务是否运行 echo "Server is running: " . $redis->ping(); 输出如下: Connection to server sucessfullyServer is running: +PONG |
REDIS命令
Redis 键相关的基本命令
DUMP key
序列化给定 key ,并返回被序列化的值。
执行DUMP humor,报如下错误:
(error) ERR unknown command ‘DUMP’
可用版本 >= 2.6.0
EXISTS key
检查给定 key 是否存在。
redis 127.0.0.1:6379> exists humor (integer) 1 |
EXPIRE key seconds
为给定 key 设置过期时间,以秒计。
redis 127.0.0.1:6379> expire humor 10 (integer) 1 |
KEYS pattern
查找所有符合给定模式( pattern)的 key 。
redis 127.0.0.1:6379> keys hum* 1) "humor" |
DEL key
该命令用于在 key 存在时删除 key。
redis 127.0.0.1:6379> del humor (integer) 1 |
Redis 字符串命令
SET key value
设置指定 key 的值
redis 127.0.0.1:6379> set humor haha OK |
GETRANGE key start end
返回 key 中字符串值的子字符
redis 127.0.0.1:6379> GETRANGE humor 1 2 "ah" |
GETSET key value
将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
redis 127.0.0.1:6379> GETSET humor cry "haha" |
MGET key1 [key2..]
获取所有(一个或多个)给定 key 的值。
redis 127.0.0.1:6379> MGET humor name 1) "cry" 2) "xiaoming" |
Redis 哈希(Hash)
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 – 1 键值对(40多亿)。
HSET key field value
将哈希表 key 中的字段 field 的值设为 value 。
redis 127.0.0.1:6379> HSET hashdemo description 'one description' (integer) 1 |
HGETALL key
获取在哈希表中指定 key 的所有字段和值
redis 127.0.0.1:6379> HGETALL hashdemo 1) "name" 2) "haha" 3) "description" 4) "one description" |
HGET key field
获取存储在哈希表中指定字段的值。
redis 127.0.0.1:6379> HGET hashdemo name "haha" |
HEXISTS key field
查看哈希表 key 中,指定的字段是否存在。
redis 127.0.0.1:6379> HEXISTS hashdemo name (integer) 1 |
HINCRBY key field increment
为哈希表 key 中的指定字段的整数值加上增量 increment 。
redis 127.0.0.1:6379> HSET hashdemo field 1 (integer) 1 redis 127.0.0.1:6379> HINCRBY hashdemo field 3 (integer) 4 |
HKEYS key
获取所有哈希表中的字段
redis 127.0.0.1:6379> HKEYS hashdemo 1) "name" 2) "description" 3) "field" |
HVALS key
获取哈希表中所有值
redis 127.0.0.1:6379> HVALS hashdemo 1) "haha" 2) "one description" 3) "2" 4) "3" |
HKEYS key
获取所有哈希表中的字段
redis 127.0.0.1:6379> HKEYS hashdemo 1) "name" 2) "description" 3) "field" 4) "field2" |
Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 – 1 个元素 (4294967295, 每个列表超过40亿个元素)。
LPUSH key value1 [value2]
将一个或多个值插入到列表头部
redis 127.0.0.1:6379> LPUSH listdemo listvalue1 (integer) |
BLPOP key1 [key2 ] timeout
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
redis 127.0.0.1:6379> BLPOP listdemo 100 1) "listdemo" 2) "listvalue1" redis 127.0.0.1:6379> BLPOP listdemo 10 (nil) (10.39s) (无元素阻塞列表) |
BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
LINDEX key index
通过索引获取列表中的元素,index从0开始
redis 127.0.0.1:6379> LPUSH listdemo 11 (integer) 1 redis 127.0.0.1:6379> LPUSH listdemo 12 (integer) 2 redis 127.0.0.1:6379> LPUSH listdemo 13 (integer) 3 redis 127.0.0.1:6379> LINDEX listdemo 1 "12" |
LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素
redis 127.0.0.1:6379> LINSERT listdemo BEFORE 12 11.5 (integer) 4 redis 127.0.0.1:6379> LRANGE listdemo 0 -1 1) "13" 2) "11.5" 3) "12" 4) "11" |
LLEN key
获取列表长度
redis 127.0.0.1:6379> LLEN listdemo (integer) 4 |
LPOP key
移出并获取列表的第一个元素
redis 127.0.0.1:6379> LPOP listdemo "13" |
RPOP key
移除列表的最后一个元素,返回值为移除的元素。
redis 127.0.0.1:6379> RPOP listdemo "11" |
Redis 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
SADD key member1 [member2]
向集合添加一个或多个成员
redis 127.0.0.1:6379> sadd setdemo mysql (integer) 1 redis 127.0.0.1:6379> sadd setdemo redis (integer) 1 redis 127.0.0.1:6379> sadd setdemo mysql (integer) 0 redis 127.0.0.1:6379> sadd setdemo mongo (integer) 1 |
SCARD key
获取集合的成员数
redis 127.0.0.1:6379> SCARD setdemo (integer) 3 |
SDIFF key1 [key2]
返回给定所有集合的差集,差集的结果来自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整个 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集。
setdemo = {mysql,redis,mongo} setdemo2 = {mysql,memcached} redis 127.0.0.1:6379> sadd setdemo2 mysql (integer) 1 redis 127.0.0.1:6379> sadd setdemo2 memcached (integer) 1 redis 127.0.0.1:6379> SDIFF setdemo setdemo2 1) "redis" 2) "mongo" redis 127.0.0.1:6379> SDIFF setdemo2 setdemo 1) "memcached" |
SDIFFSTORE destination key1 [key2]
返回给定所有集合的差集并存储在 destination 中
redis 127.0.0.1:6379> SDIFFSTORE setdemo3 setdemo setdemo2 (integer) 2 |
SMEMBERS key
返回集合中的所有成员
redis 127.0.0.1:6379> SMEMBERS setdemo 1) "redis" 2) "mongo" 3) "mysql" |
SPOP key
移除并返回集合中的一个随机元素
SREM key member1 [member2]
移除集合中一个或多个成员
redis 127.0.0.1:6379> SREM setdemo 'haha' (integer) 0 redis 127.0.0.1:6379> SREM setdemo mysql (integer) 1 |
Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
ZADD key score1 member1 [score2 member2]
向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZRANGE key start stop [WITHSCORES]
通过索引区间返回有序集合成指定区间内的成员
redis 127.0.0.1:6379> ZADD zdddemo 2 mysql (integer) 1 redis 127.0.0.1:6379> ZADD zdddemo 3 memcached (integer) 1 redis 127.0.0.1:6379> ZRANGE zdddemo 0 5 WITHSCORES 1) "mysql" 2) "2" 3) "memcached" 4) "3" |
ZCOUNT key min max
计算在有序集合中指定区间分数的成员数
redis 127.0.0.1:6379> ZCOUNT zdddemo 3 5 (integer) 1 |
ZRANK key member
返回有序集合中指定成员的索引
redis 127.0.0.1:6379> ZRANGE zdddemo 0 -1 WITHSCORES 1) "oracle" 2) "-1" 3) "mysql" 4) "2" 5) "memcached" 6) "3" 7) "redis" 8) "7" 9) "postgresql" 10) "8" redis 127.0.0.1:6379> ZRANK zdddemo redis (integer) 3 redis 127.0.0.1:6379> ZRANK zdddemo oracle (integer) 0 |
ZREM key member [member …]
移除有序集合中的一个或多个成员
redis 127.0.0.1:6379> ZREM zdddemo oracle (integer) 1 |
ZREVRANK key member
返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
redis 127.0.0.1:6379> ZRANGE zdddemo 0 -1 WITHSCORES 1) "mysql" 2) "2" 3) "memcached" 4) "3" 5) "redis" 6) "7" 7) "postgresql" 8) "8" redis 127.0.0.1:6379> ZREVRank zdddemo redis (integer) 1 |
ZSCORE key member
返回有序集中,成员的分数值
redis 127.0.0.1:6379> ZSCORE zdddemo redis "7" |
Redis 事务
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
批量操作在发送 EXEC 命令前被放入队列缓存。
收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
开始事务。
命令入队。
执行事务。
redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> set queuedemo haha QUEUED redis 127.0.0.1:6379> GET queuedemo QUEUED redis 127.0.0.1:6379> LPUSH list1 haha QUEUED redis 127.0.0.1:6379> EXEC 1) OK 2) "haha" 3) (integer) 2 |
DISCARD
取消事务,放弃执行事务块内的所有命令。
redis 127.0.0.1:6379> MULTI OK redis 127.0.0.1:6379> SET setdemo2 haha QUEUED redis 127.0.0.1:6379> GET setdemo2 QUEUED redis 127.0.0.1:6379> DISCARD OK redis 127.0.0.1:6379> GET setdemo2 (error) ERR Operation against a key holding the wrong kind of value |
设置和获取字符串
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "Connection to server sucessfully"; //设置 redis 字符串数据 $redis->set("tutorial-name", "Redis tutorial"); // 获取存储的数据并输出 echo "Stored string in redis:: " . $redis->get("tutorial-name"); //释放资源 $redis->close(); 输出如下: Connection to server sucessfullyStored string in redis:: Redis tutorial |
设置和获取列表
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "Connection to server sucessfully"; //存储数据到列表中 $redis->lpush("tutorial-list", "Redis"); $redis->lpush("tutorial-list", "Mongodb"); $redis->lpush("tutorial-list", "Mysql"); // 获取存储的数据并输出 // 区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素 $arList = $redis->lrange("tutorial-list", 0 ,5); //输出第一个到第六个元素 echo "Stored string in redis"; echo '<pre>'; print_r($arList); 输出如下 Connection to server sucessfullyStored string in redis Array ( [0] => Mysql [1] => Mongodb [2] => Redis [3] => Mysql [4] => Mongodb [5] => Redis ) |
获取所有keys并输出
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "Connection to server sucessfully"; // 获取所有keys并输出 $arList = $redis->keys("*"); echo "Stored keys in redis:: "; echo '<pre>'; print_r($arList); 输出如下: Array ( [0] => intxx [1] => int1 [2] => cachephp [3] => tutorial-list [4] => set1 [5] => redis_que [6] => tutorial-name [7] => intx [8] => abc [9] => in1 [10] => in2 [11] => redis_queue1447 [12] => myabc [13] => list1 [14] => list2 [15] => mykey [16] => intx1 [17] => hash1 [18] => redis_queue147 ) |
设置过期时间
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); //设置成功返回true,失败返回false,key不存在设置失败 //10s后失效 $res=$redis->expire('myabc',10); $redis->close(); var_dump($res); 输出如下: true |
获取key的长度
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $res=$redis->get('intxx'); // 13 $length = $redis->strlen('intxx'); echo $length; 输出如下: 2 |
追加字符串
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo $redis->get('intxx'); // 13 echo $redis->append('intxx','append'); // 返回追加后的个数8 echo $redis->get('intxx'); |
自增自减
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->set('one_int',33); //33 echo $redis->get('one_int'); $redis->incr('one_int',22); //第二个参数为增加的个数,可选,空为1 echo $redis->get('one_int'); //55 $redis->decr('one_int',1); // echo $redis->get('one_int'); //54 |
参考地址
https://www.cnblogs.com/wenxinphp/p/6016449.html
https://www.cnblogs.com/aipiaoborensheng/p/5666005.html