过期时间
Redis 允许你指定 key 的存活时间,该命令基于key,和key所对应的数据结构无关
- 指定秒数后删除
expire <key> <seconds>
- 指定时间戳后删除
expireat <key> <timestamp>
- 查看 key 存活时间
ttl <key>
- 删除已过期的 key
persist <key>
- set+expire 的简易命令
setex <key> <second> <value>
发布订阅
常用命令:
- 普通订阅
subscribe <channel channel2...>
- 通过指定pattern订阅
psubscribe <pattern pattern2...>
- 发布
publish <chennel> <message>
- 取消订阅
unsubscribe <chennel>
、punsubscribe <pattern>
publish命令返回值为1,代表有1个客户端收到消息
用列表的 blpop
和brpop
也可做成一个堵塞式的简单队列
调试
非生产环境下,可以通过 monitor
来监控Redis的状态,能够看到执行时的运行的命令和参数
127.0.0.1:6379> monitor
OK
1571365868.525249 [0 127.0.0.1:33084] "set" "test01" "test01 here"
1571365878.108222 [0 127.0.0.1:33084] "get" "test01"
1571365891.326015 [0 127.0.0.1:33084] "keys" "*"
性能分析用slowlog
命令,可以记录执行时间超过指定微秒的慢查询,默认追踪最新1024条日志
- 检索日志
slowlog get <args>
(默认10个) - 获取日志条数
slowlog len
以一个日志内容为例:
127.0.0.1:6379> slowlog get
1) 1) (integer) 29
2) (integer) 1571366491
3) (integer) 2
4) 1) "slowlog"
2) "len"
5) "127.0.0.1:33086"
6) ""
1) 自增的日志 id
2) 命令开始时间 (Unix时间戳)
3) 执行时间(微秒)
4) 具体命令和参数
排序
Redis最强力的命令之一,可以对列表、集合、有序集合中的值进行排序
- 简单排序
sort <key>
- 指定条数并根据字典序降序
sort <key> limit <start> <stop> desc alpha
还可以基于引用的对象排序,通过指定pattern(例子中是以f
后面的数字),在程序中可以用列表、集合等值替换
127.0.0.1:6379> smembers qzone
1) "mike"
2) "f1"
3) "john"
4) "f4"
5) "jack"
6) "f3"
7) "f2"
8) "f5"
9) "f6"
127.0.0.1:6379> sort qzone by f* asc
1) "f1"
2) "f2"
3) "f3"
4) "f4"
5) "f5"
6) "f6"
7) "jack"
8) "john"
9) "mike"
sort
对哈希结构和其字段也有效,用哈希结构取代 key,以 bug 追踪系统的字段结构为例, bug:list
集合包含bug的id
,哈希结构 bug:<id>
包含严重度severity
、优先度priority
、详细信息details
使用->
序列用于找到哈希结构中指定的字段,再接 get
可以获取详情,store
可以存储到新 key
sort watch:leto by bug:*->priority get bug:*->details
扫描
在Redis2.8中引入了 scan
命令,和 keys
命令的目的类似,但对生产环境无害,它是完全无状态的,不需要关闭游标,即使返回下一个游标也可以随时终止遍历结果集,根据不同类型还有hscan
,sscan
,zscan
它于keys
不同在于
- 调用
scan
无需返回所有匹配结果,可以用count
控制,默认为10 - 使用cursor,初始调用时要指定
0
,例如scan 0 match bug:* count 20
- 第一个返回值为下一个可用游标,返回
0
表示扫描结束
需要注意
- 可以多次返回相同的 key,需要自己处理
- 只保证在迭代的整个持续过程中存在的值会被返回,如果迭代中有值被添加或删除,新值可能被返回,旧值被忽略