监听键的变化事件
开启 notify-keyspace-events 之后,Redis 会把键的变化事件发布到内部频道:一个是按具体键命名的键空间频道,发布「这个键发生了什么事件」;另一个是按事件类型命名的键事件频道,发布「发生该事件的键名」。借助这套机制可以驱动缓存失效、延迟提醒、审计记录等联动逻辑。标志位用一串字母组合控制监听范围,其中 K 表示键事件、E 表示键空间,A 是常用事件的组合缩写。
基本信息
| 开关 | notify-keyspace-events,可用 CONFIG SET 动态修改 |
|---|---|
| 键空间频道 | __keyspace@0__:<key> |
| 键事件频道 | __keyevent@0__:<event> |
| 常用标志 | Ex 只听过期事件,KEA 覆盖较全 |
| 投递语义 | 基于发布订阅,不保证送达 |
典型使用场景
- 缓存失效联动:监听键的变化,通知本地缓存或检索索引清理
- 延迟提醒:配合过期事件做轻量的到期通知
- 审计与排障:观察某类键到底在什么时刻被改写
- 灰度验证:确认某个业务是否真的在写某批键
- 与消息队列互补:需要可靠投递时改用 Stream 或外部队列
开启与订阅
开启与订阅
redis-cli CONFIG SET notify-keyspace-events KEA
redis-cli SUBSCRIBE '__keyevent@0__:expired' # 监听所有过期事件
redis-cli SUBSCRIBE '__keyspace@0__:session:1' # 只监听某个键的事件
redis-cli SET session:1 v EX 5 # 触发一次过期事件
redis-cli CONFIG GET notify-keyspace-events # 复核当前标志位
redis-cli CONFIG REWRITE # 确认后落盘标志位读法
| 标志 | 含义 | 说明 |
|---|---|---|
| K | 键事件 | 频道名按事件类型划分 |
| E | 键空间 | 频道名按具体键划分 |
| g 与 $ 等 | 字符串类事件 | 分别覆盖不同的命令族 |
| A | 常用组合缩写 | 约等于除少数类型之外的全部事件 |
连接断线期间产生的事件不会补发,通知也不保证送达。它适合做「尽快感知」的联动,不适合作为唯一的投递通道;对可靠性有要求时应改用消费组模式的 Stream。
全量开启会给每次写操作附加发布开销。长期打开最全的组合,在高写入实例上会带来可观测的额外负载,生产环境建议只开启业务真正需要的那几类事件。