此通知用于Spring-session-data-redis中,用于监听会话的过期事件和删除事件。在此对官网文档做一次梳理。
可用版本:2.8.0+
Note:如果客户端在某段时间内断开了连接,那么这个时间段内的事件通知将会丢失,即重新连接无法收到相关事件
以进行del mykey
操作为例
使用key作为channel标识,进行的操作作为消息内容
等价于下面命令
PUBLISH __keyspace@0__:mykey del
使用进行的操作作为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 |
---|---|---|
DEL | del | 已删除的key |
RENAME | rename_from、rename_to | 旧key、新key |
MOVE | move_from、move_to | 旧key、新key |
EXPIRE | expire、expired | expire-为一个key设置过期时间;expired-一个key因为过期被删除时 |
更多事件参考:https://redis.io/topics/notifications
expired事件必须在key真正被Redis删除时才会发布,Redis删除key存在两种情况:
1、key的ttl为0,而且客户端访问了该key,Redis会检查过期key并删除;
2、Redis的定时删除策略;
如果key的ttl为0,我们不一定会接收到expired事件,只有在上面两种情况发生时,才会产生expired事件。