Redis定时任务原理的实现

本文主要是基于 redis 6.2 源码进行分析定时事件的数据结构和常见操作。

数据结构

在 redis 中通过 aetimeevent 结构来创建定时任务事件,代码如下:

常见操作

1. 创建定时事件

redis 中最重要的定时函数且是周期执行的函数,使用的是 servercron 函数。在 redis 中由于定时任务比较少,因此并没有严格的按照过期时间来排序的,而是按照 id自增 + 头插法 来保证基本有序。

2. 触发定时事件

redis 中是采用 io 复用来进行定时任务的。

查找距离现在最近的定时事件,见 usuntilearliesttimer

这里时间复杂度可能比较高,实际中需要结合具体场景使用。

更新剩余过期时间,想想为啥呢?因为我们前面提到过,io 复用有可能因为 io 事件返回,所以需要更新。

3. 执行定时事件

一次性的执行完直接删除,周期性的执行完在重新添加到链表。

总结

优点:实现简单
缺点:如果定时任务很多,效率比较低。

到此这篇关于redis定时任务原理的实现的文章就介绍到这了,更多相关redis定时任务内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐