当 Redis 某些键触发某些操作时,Redis 将操作的相关信息通过 发布/订阅 的方式进行通知,订阅消息不可靠可能会丢失。
举例来说,在数据库0的mykey上执行了DEL操作,这时Redis将发布两条通知消息到2个不同的订阅频道
PUBLISH __keyspace@0__:mykey delPUBLISH __keyevent@0__:del mykey
keyspace 被叫做键空间通知(上面例子:所有跟mykey空间有关的操作),keyevent 被叫做键事件通知(上面例子:所有跟删除事件有关的操作)
配置
通过 redis.conf 的 notify-keyspace-events 设置对应参数,参数如下
K 键空间事件,以__keyspace@__前缀发布。
E 键事件事件,以__keyevent@__前缀发布。
g 通用命令(非类型特定),如DEL,EXPIRE,RENAME等等
$ 字符串命令
l 列表命令
s 集合命令
h 哈希命令
z 有序集合命令
x 过期事件(每次键到期时生成的事件)
e 被驱逐的事件(当一个键由于达到最大内存而被驱逐时产生的事件)
A g$lshzxe的别名,因此字符串AKE表示所有的事件。
一般设置 KEA 就代表了所有可能的事件
过期事件
expired事件是在Redis服务器删除键的时候生成的,而不是在理论上生存时间达到零值时生成的,所以会出现明显的事件延迟。
因为 Redis 键过期才触发expired事件有两种情况:
1、当命令访问键时,发现键过期
2、通过定期随机查找过期的key