redis key过期通知在一段时间后无法收到通知
最近基于redis key过期通知做了一个定时器。用来处理一次性定时任务,面向搜索引擎编程的我,三下五除二就copy就完成了
程序刚启动后没什么问题。可以收到正常收到通知(我好厉害,好牛逼,,好开心,可以下班了)
但是历史总是惊人的相似,往往自以为是的我总是会被打脸,第二天早上发现在这个通知一段时间后就再也收不到通知了。。。。。。。。(万马奔腾)
主题来了
不废话了,首先想到的是,订阅连接是不是关闭了,果不其然,订阅连接就是关闭了。
但是为什么我没有看到客户端出现错误或异常呢?估计第三方库还是做得不够完善。
然后我就去读了一把redis的redis.conf
发现其中有一个配置是这样的
机智的我,看到这个0 格外的扎眼。就觉得他有问题, 在读了他的说明。发现应该就是他的问题,
然后我就把它改成了官方推荐的 60秒,果不其然。不再会订阅断开的问题了。
将 tcp-keepalive 60 即可解决这个问题
这里需要说明下,如果你是 4.x or 5.x版本的redis 默认值是300秒。 3X版本默认值是0
tcp-keepalive说明
tcp-keepalive 0 此配置的作用是检查健康的连接的时间,可以理解为心跳机制(官方建议值为60秒)
如果设置为0则不会检查心跳信息,就会造成连接实际已经断开了。但是客户端不知道,也不会抛异常。
springboot订阅redis过期通知代码
- maven依赖
<dependency