面试题答案
一键面试底层原理
- 事件驱动模型:Redis基于事件驱动模型,时间事件是其中一类事件。Redis的事件循环(aeMain函数)不断检查是否有事件发生,包括文件事件(如客户端连接、读写等)和时间事件。
- 周期性任务触发:Redis使用一个全局变量
server.hz
来定义时间事件的执行频率,默认值为10,即每秒执行10次。在事件循环中,通过计算当前时间与上次执行时间的差值,判断是否达到执行周期。 - 任务执行:当时间事件到达执行时间,Redis会将对应的时间事件函数添加到待执行队列中,然后在事件循环的适当阶段依次执行这些函数。
关键数据结构
- aeEventLoop:Redis的事件循环结构体,包含了多个重要字段,如
timeEventHead
指向时间事件链表的头节点,通过该链表管理所有时间事件。 - aeTimeEvent:时间事件结构体,包含唯一标识符
id
、事件到达时间when
、事件处理函数timeProc
、事件释放函数finalizerProc
以及指向下一个时间事件的指针next
。通过这个结构体形成时间事件链表。