Redis 监听过期键的key事件

Redis 从2.8.0版本后,推出了Keyspace Notifications特性.
Keyspace Notifications 此特性允许客户端可以以订阅/发布(Sub/Pub)模式,接收那些对数据库中的键和值有影响的操作事件。

Redis 目前的订阅与发布功能采取的是发送即忘(fire and forget)策略,如果程序需要可靠事件通知,那么目前的键空间通知可能不适合:当订阅事件的客户端断线时,它会丢失所有在断线期间分发给它的事件。并不能确保消息送达。

在redis.conf设置

  • Redis 监听过期键的key事件_第1张图片
    image.png

开启redis-cli 等待过期键的通知

  • image.png

在另一个客户端设置10s过期的key

  • image.png

收到过期键的通知

  • Redis 监听过期键的key事件_第2张图片
    image.png

事件类型

  • 对于每个修改数据库的操作,键空间通知都会发送两种不同类型的事件消息:keyspace和keyevent。以 keyspace 为前缀的频道被称为键空间通知(key-space nnotification),而以 keyevent 为前缀的频道则被称为键事件通知(key-event notification).

  • 事件是用 keyspace@DB:KeyPattern 或者 keyevent@DB:OpsType 的格式来发布消息的.

    • DB 表示在第几个数据库
    • KeyPattern 则是表示需要监控的键模式(可以用通配符,如: key*:*)
    • OpsType 则表示操作类型
  • 因此,如果想要订阅特殊的Key上的事件,应该是订阅keyspace

例如:对0号数据库的键myKey 执行 DEL 命令时,系统将分发两条消息,相当于执行以下两个 PUBLISH 命令:
publish  __keyspace@0__:sampleKey del
publish  __keyevent@0__:del sampleKey
订阅第一个频道 __keyspace@0__:mykey 可以接收0号数据库中所有修改键mykey的事件
而订阅第二个频道 __keyspace@0__:del 则可以接收0号数据库中所有执行 del 命令的键

开启配置

字符 发送通知
K 键空间通知,所有通知以 keyspace@ 为前缀,针对key
E 键事件通知,所有通知以 keyevent@ 为前缀,针对event
g DEL、EXPIRE、RENAME 等类型无关的通用命令的通知
$ 字符串命令的通知
l 列表命令的通知
s 集合命令的通知
h 哈希命令的通知
z 有序集合命令的通知
x 过期事件:每当有过期键被删除时发送
e 驱逐(evict)事件:每当有键因为maxmemory政策而被删除时发送
A 参数 g$lshzxe 的别名,相当于All

例如:"Kx" 表示想监控某个Key的失效事件

你可能感兴趣的:(Redis 监听过期键的key事件)