Redis延时任务源码分析
我们先了解延迟任务的存储,主要分两块
1.延时数据存在queue:queue:delayed 中
2.原始的对列消费表,会存一份数据,这里的状态是 pending,证明未处理
关键的一步就是,如何定时任务的逻辑,应用到正常的队列中消费了,直接上代码
每一次出栈调度,都先执行一次migrate,功能是将当前已经过了时间的延时任务,通过lua脚本push进入 queue:queue队列,
$this->retrieveNextJob
到这里其实我们整个逻辑已经梳理清楚了,这个方法会去用到queue:queue里面的数据,正常消费
补充:进行这个整理主要是有个同事问到我,有一部分延迟任务会不被执行,占比大概是 五分之一,我这里可以基本定位到问题应该出现在lua脚本中。
也就是 delayed集合的数据,入栈到queue:queue的过程中出现了数据丢失。
我们看源码,这里分成了两步走,入栈的时候出现了数据丢失。
后面会持续补充,这部分lua代码的运作验证,及这次问题的处理方式。
以上是 Redis延时任务源码分析 的全部内容, 来源链接: utcz.com/z/514434.html