Time Event 1 - wyc902/redis GitHub Wiki
Redis 里面的时间事件,主要分为两类。
一类是一次性定时事件,比如在某一个时刻到来的时候执行一次,就算任务完成。
一类是周期性定时事件,比如每隔30s执行一次的任务。
和时间事件相关的数据结构是time_event,重要成员变量有
id:时间事件的id,主键,全剧唯一,而且是递增的,这和数据库里的id主键很像。
when:精确到毫秒的unix时间戳,记录事件到来的时刻
timeProc:函数指针,指向事件处理函数
所有的time_event结构构成一个链表,链表按id排序。但是没有按when排序。所以时间事件处理器运行的时候要遍历整个链表才知道哪些时间到期需要处理。根据redis的文档,大部分时候,服务器只有serverCron一个事件需要执行,所以链表基本上退化成了指针,对性能没什么影响。
时间事件处理器每处理完一个事件返回一个值。如果值是AE_NOMORE,表示该事件是一个非周期事件,对应的time_event结构可以直接从链表中删除。如果返回一个非AE_NOMORE的整数值,说明该事件是个周期事件,比如返回10表示10毫秒后再次执行。这个时候只要更新time_event.when就好。