def process_event():
# 获取执行时间最接近现在的一个时间事件(过去的事件和未来要执行的事件 中找离现在最近的事件时间)
te = get_nearest_time_event(server.time_event_linked_list)
# 检查该事件的执行时间和现在时间之差
# 如果值 <= 0 ,说明至少有一个时间事件已到达
# 如果值 > 0 ,说明目前没有任何时间事件到达
nearest_te_remaind_ms = te.when - now_in_ms()
if nearest_te_remaind_ms <= 0:
# 若有时间事件已达,则调用不阻塞的文件事件等待函数
poll(timeout=None)
else:
# 若时间事件还没到达,则阻塞的最大时间不超过 te 的到达时间
poll(timeout=nearest_te_remaind_ms)
# 优先处理已就绪的文件事件
process_file_events()
# 再处理已到达的时间事件
process_time_event()
在配置文件中设置,配置命令如下
save 3600 1; // 3600s内有1个key变化就执行持久化
save 300 100
save 60 1000
或者 用户手动执行命令,如下 save命令: 同步快照方式,此方式会阻塞redis服务主进程对客户端命令的执行,不推荐; bgsave命令: 异步快照方式,此方法会 fork一个子进程 在后台执行,不影响主进程的效率;
这种持久化方式是 将 执行命令追加到文件中;