Redis 开启掉线推送后无法收到通知排错

在预生产环境中,Redis 设置的键值过期推送功能无法正常工作。问题出现在掉线通知程序运行的次服务器无法接收到主服务器的推送。通过检查notify-keyspace-events配置,发现Redis未开启过期事件推送。按照官方文档设置Kx后,尝试通过PSUBSCRIBE订阅过期事件,但发现通过redis-server & 启动的服务无法收到推送,而指定redis.conf配置后则可以。这提示可能的问题在于启动方式或配置生效机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:代码本地调试通过,能够连接到开发服务器的redis,存储键值在过期的时候推送,但是在预生产服务器就无法进行推送。

经过调试发现可以将值存储进redis,但是在手动设置过期的时候,程序无法收到推送通知。

排错过程: 

  1.预生产服务仿照生产服务使用了两天服务器,开发环境只用到了一台,所以初步认为可能是推送通知无法从主服务器发送到次服务器[掉线通知的程序在次服务器,redis安装在主服务器],向技术支持询问以及技术架构说明原因后,说不是这个原因导致[这里不是特别明确,一开始我以为推送是通过某个连接发送到服务端,但是听技术架构描述好像不是这样,以后调研清楚]。

2.技术架构给出了第二种排错方式,链接到预生产服务器的reids 然后订阅频道,看事件过期能否收到推送。

流程如下:

1.开启两个远程连接  同时连接上redis    redis-cli

2.查看是否开启了掉线推送    get notify-keyspace-events

 

如果是这样表示redis没有开启这个配置,需要手动开启。

set notify-keyspace-events Kx  [此配置根据自己的需求来。官方文档:https://redis.io/topics/notifications

K     Keyspace events, published with __keyspace@<db>__ prefix.
E     Keyevent events, published with __keyevent@<db>__ 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
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$lshzxe, so that the "AKE" string means all the events.

上图为官方文档的介绍。

然后某一个连接进行订阅操作:

 PSUBSCRIBE __keyspace@*__:lost:*  [keyspace@*  这里的* 表示所有。lost:* 表示监听所有lost: 开头的键的掉线推送 ]

连接成功如上图所示。

另外一个连接设置键值以及过期时间  setex lost:test 5 10 [5为5秒后过期,10为值]

查看键过期时间 ttl lost:test   [ttl 键的名称]

然后查看另外一个链接是否收到。


 当时预生产环境确实无法收到,过期推送。研究了一下发现,通过 redis-server & 的方式启动以后,手动开启过期事件推送无法收到推送。但是当指定redis.conf的配置再手动开启推送就可以了[在配置文件中指定不生效。。。]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值