过期时间

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个客户端收到消息

用列表的 blpopbrpop 也可做成一个堵塞式的简单队列

调试

非生产环境下,可以通过 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命令的目的类似,但对生产环境无害,它是完全无状态的,不需要关闭游标,即使返回下一个游标也可以随时终止遍历结果集,根据不同类型还有hscansscanzscan 它于keys不同在于

  • 调用scan无需返回所有匹配结果,可以用count控制,默认为10
  • 使用cursor,初始调用时要指定0 ,例如scan 0 match bug:* count 20
  • 第一个返回值为下一个可用游标,返回0表示扫描结束

需要注意

  • 可以多次返回相同的 key,需要自己处理
  • 只保证在迭代的整个持续过程中存在的值会被返回,如果迭代中有值被添加或删除,新值可能被返回,旧值被忽略