最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
为什么Redis订阅者收不到过期Key的删除通知_核对过期事件配置开关
时间:2026-08-10 17:26:49 编辑:袖梨 来源:一聚教程网
Redis键过期事件默认关闭,需配置notify-keyspace-events Ex并持久化;订阅须用PSUBSCRIBE __keyevent@*__:expired匹配所有库,且必须连接主节点;事件无ACK、不保证顺序与可靠性。
notify-keyspace-events 配置没生效,根本不会发事件
Redis 默认完全关闭键空间事件,notify-keyspace-events 值为空字符串(不是 "",是真正空)——这意味着哪怕你执行了 SET key val EX 10,过期那一刻也不会产生任何通知。这不是延迟或丢包,是压根没开闸。
实操建议:
- 用
redis-cli CONFIG GET notify-keyspace-events查当前值,确认返回的是["notify-keyspace-events","Ex"],而不是空或"" - 配置必须写成
notify-keyspace-events Ex(无引号、大小写敏感),写成"Ex"或ex都会被 Redis 静默忽略 - 动态设置
CONFIG SET notify-keyspace-events Ex仅本次有效,重启即失效;务必同步写入redis.conf并重启,或用CONFIG REWRITE持久化 - 该配置作用于整个 Redis 实例,无法按 database 单独开关
订阅的频道名和实际触发的频道不匹配
Redis 只向固定格式的频道发布过期事件:__keyevent@N__:expired,其中 N 是该 key 所在的数据库编号(比如你在 SELECT 2 后执行 SETEX mykey 5 "v",事件就发往 __keyevent@2__:expired)。
常见问题表现:
- 应用连的是 db2,却订阅
__keyevent@0__:expired—— 收不到 - 用
SUBSCRIBE __keyevent@0__:expired,但 key 在 db1 过期 —— 收不到 - 测试时用
redis-cli --csv SUBSCRIBE __keyevent@0__:expired,shell 把@当特殊字符解析,实际订阅失败 —— 加单引号:redis-cli --csv SUBSCRIBE '__keyevent@0__:expired' - 误订
__keyspace@0__:expired(前缀是keyspace)—— 这是“键空间”通知,只发操作类型(如set、del),不发expired事件
客户端没用 PSUBSCRIBE,导致通配监听失效
如果你不确定 key 会在哪个 db 过期,或想统一收所有库的过期事件,必须用 PSUBSCRIBE 订阅模式,而不是 SUBSCRIBE。
正确做法:
- 用
PSUBSCRIBE __keyevent@*__:expired,星号匹配任意 db 编号 -
SUBSCRIBE只能精确匹配一个频道名,无法跨 db 监听 - Jedis、Lettuce 等客户端库默认不自动重连 Pub/Sub 连接,断连后不会自动恢复订阅 —— 必须自己实现重连 + 重订阅逻辑
- Spring Data Redis 的
RedisMessageListenerContainer支持自动重连,但需确认setSubscriptionExecutor和线程池配置合理,否则大量事件可能堆积或丢失
主从架构下只在主节点收得到通知
键过期事件只由主节点生成并发布,从节点不发事件。即使你的客户端连的是从节点(比如读写分离场景),只要没显式切换到主连接做订阅,就收不到任何 expired 消息。
关键点:
- 订阅动作必须发生在主节点连接上,不能靠从节点同步过来
- 集群模式(Redis Cluster)中,每个分片的主节点独立发布自己的
__keyevent@N__:expired,需分别订阅各主节点对应频道 - Redisson 等高级客户端封装了集群拓扑发现,但底层仍要求对每个 master 单独建立 Pub/Sub 连接;若配置了
readMode = ReadMode.SLAVE,Pub/Sub 默认也可能走错节点
最常被忽略的一点:事件通知是 fire-and-forget 的,没有 ACK,没有重试,也没有顺序保证。客户端掉线期间发生的过期,永远丢失。别把它当可靠消息队列用。
相关文章
- 校友邦网页版登录入口-校友邦网页版登录官网 08-10
- 壹品仓app如何下单 08-10
- 学信网官方网站入口在哪-学信网学籍查询入口 08-10
- 同步学如何加入班级 08-10
- 1元10抖币充值入口苹果-抖币1:10充值入口 08-10
- 雨果跨境app如何关闭个性化推荐 08-10