用redis的监听失效key方法来去执行任务,怎么优化好不稳定性?
现在有倒计时的任务,但是任务完成结束的时间无法确定,延迟在10秒左右,可能会5秒就好,也可能12秒左右就好,现在我无法预估好失效的时间,只能取15秒的延迟时间,然后监听失效后去调取函数,然后去循环计算并且更新各个用户的奖励值,现在的问题就是太不稳定了,延迟了15秒,可能任务还没完成结束,监听就已经开始了,导致数据出错不更新;如果设置延迟时间太长,更新用户的值所用的时长也会变的很长,现在我想要能准确监听好任务的完成,并且更新用户的值的时长也不会很长,有什么好的解决办法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
org.springframework.data.redis.listener.KeyExpirationEventMessageListener
这个类可以用于
Redis
过期监听。redis过期事件订阅
你的问题应该从需求的根源去找才是,为什么任务完成结束的时间不确定?
如果你的需求丑陋,那么技术方案也变得很丑陋。
所以回过头来想想,是不是可以从需求上面去解决问题?
任务完成之后是否可以异步调用‘结算积分’方法,否的话见方案1
方案1:
监听binlog变化,发现任务完全则进行积分结算,推荐使用阿里开源的
canal
1.rabbitMQ的延迟队列+死信队列
2.采用MySQL的定时器来自动维护