首页/数据/Redis 进阶速查/键空间通知:监听键的变化事件
内存与管理99 条

键空间通知:监听键的变化事件

开启 notify-keyspace-events 后,Redis 把写入、过期、删除等事件发布到 __keyspace@0__ 与 __keyevent@0__ 频道,可驱动缓存失效等联动。

Redis 进阶速查数据更新于 2026-10-13

监听键的变化事件

开启 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。
全量开启会给每次写操作附加发布开销。长期打开最全的组合,在高写入实例上会带来可观测的额外负载,生产环境建议只开启业务真正需要的那几类事件。

易错点

  • 把通知当作可靠投递使用,事件丢失时业务状态长期不一致且难以定位
  • 开启的事件类型过多,写路径上附加的发布开销拉低整体吞吐
  • 频道名写错(键空间与键事件混淆),订阅长时间收不到任何消息
  • 在事件回调里执行重逻辑,事件堆积时处理不过来,反向影响主流程

数据来源与参考

  • Redis 官方文档:Keyspace Notifications(notify-keyspace-events)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌