MST

星途 面试题库

面试题:Redis时间事件之周期性任务:基础原理

在Redis中,时间事件的周期性任务是如何触发和执行的?请简要阐述其底层原理及涉及的关键数据结构。
49.4万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

底层原理

  1. 事件驱动模型:Redis基于事件驱动模型,时间事件是其中一类事件。Redis的事件循环(aeMain函数)不断检查是否有事件发生,包括文件事件(如客户端连接、读写等)和时间事件。
  2. 周期性任务触发:Redis使用一个全局变量 server.hz 来定义时间事件的执行频率,默认值为10,即每秒执行10次。在事件循环中,通过计算当前时间与上次执行时间的差值,判断是否达到执行周期。
  3. 任务执行:当时间事件到达执行时间,Redis会将对应的时间事件函数添加到待执行队列中,然后在事件循环的适当阶段依次执行这些函数。

关键数据结构

  1. aeEventLoop:Redis的事件循环结构体,包含了多个重要字段,如 timeEventHead 指向时间事件链表的头节点,通过该链表管理所有时间事件。
  2. aeTimeEvent:时间事件结构体,包含唯一标识符 id、事件到达时间 when、事件处理函数 timeProc、事件释放函数 finalizerProc 以及指向下一个时间事件的指针 next。通过这个结构体形成时间事件链表。