用redis的监听失效key方法来去执行任务,怎么优化好不稳定性?

现在有倒计时的任务,但是任务完成结束的时间无法确定,延迟在10秒左右,可能会5秒就好,也可能12秒左右就好,现在我无法预估好失效的时间,只能取15秒的延迟时间,然后监听失效后去调取函数,然后去循环计算并且更新各个用户的奖励值,现在的问题就是太不稳定了,延迟了15秒,可能任务还没完成结束,监听就已经开始了,导致数据出错不更新;如果设置延迟时间太长,更新用户的值所用的时长也会变的很长,现在我想要能准确监听好任务的完成,并且更新用户的值的时长也不会很长,有什么好的解决办法吗?

阅读 3.7k
5 个回答

org.springframework.data.redis.listener.KeyExpirationEventMessageListener

这个类可以用于Redis过期监听。

你的问题应该从需求的根源去找才是,为什么任务完成结束的时间不确定?
如果你的需求丑陋,那么技术方案也变得很丑陋。
所以回过头来想想,是不是可以从需求上面去解决问题?

任务完成之后是否可以异步调用‘结算积分’方法,否的话见方案1

方案1:

监听binlog变化,发现任务完全则进行积分结算,推荐使用阿里开源的canal

canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
新手上路,请多包涵

1.rabbitMQ的延迟队列+死信队列
2.采用MySQL的定时器来自动维护

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题