当前位置: 首页 > 工具软件 > Keyspace > 使用案例 >

Redis专区-Keyspace Event Notification

席银龙
2023-12-01

此通知用于Spring-session-data-redis中,用于监听会话的过期事件和删除事件。在此对官网文档做一次梳理。

可用版本:2.8.0+

Note:如果客户端在某段时间内断开了连接,那么这个时间段内的事件通知将会丢失,即重新连接无法收到相关事件

事件类型

以进行del mykey操作为例

key-space通知

使用key作为channel标识,进行的操作作为消息内容

等价于下面命令


PUBLISH __keyspace@0__:mykey del

key-event通知

使用进行的操作作为channel标识,key作为消息内容

等价于下面命令

PUBLISH __keyevent@0__:del mykey

配置

默认该特性是关闭的,因为该特性会占用一定的CPU资源。要启用该特性可以通过CONFIG SET命令或者配置redis.conf来设置notify-keyspace-events参数,值为下面字符组成的非空字符串:

K Keyspace events, published with keyspace@ prefix.
E Keyevent events, published with keyevent@ prefix.
g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, …
$ String commands
l List commands
s Set commands
h Hash commands
z Sorted set commands
t Stream commands
x Expired events (events generated every time a key expires)
e Evicted events (events generated when a key is evicted for maxmemory)
A Alias for g$lshztxe, so that the “AKE” string means all the events.

示例:配置所有的event

config set notify-keyspace-events KEA

一些常用命令产生的事件

命令事件名称相关key
DELdel已删除的key
RENAMErename_from、rename_to旧key、新key
MOVEmove_from、move_to旧key、新key
EXPIREexpire、expiredexpire-为一个key设置过期时间;expired-一个key因为过期被删除时

更多事件参考:https://redis.io/topics/notifications

expired事件附加说明

expired事件必须在key真正被Redis删除时才会发布,Redis删除key存在两种情况:
1、key的ttl为0,而且客户端访问了该key,Redis会检查过期key并删除;
2、Redis的定时删除策略;

如果key的ttl为0,我们不一定会接收到expired事件,只有在上面两种情况发生时,才会产生expired事件。

参考来源:
https://redis.io/topics/notifications

 类似资料: