Updated at 2019-05-13 16:25

文件事件

  1. Redis服务器通过Stocket与客户端或其它Redis服务器进行连接,文件事件是对这些Stocket操作的抽象
  2. 文件事件处理器使用IO多路复用同时监听多个Stocket,根据Stocket目前执行的任务关联不同的事件处理器;被监听的Stocket准备执行acceptreadwriteclose时,与操作相对应的文件事件就会产生,然后事件处理器就会开始处理
  3. 文件处理以单线程运行,虽然文件事件会并发地产生,IO多路复用程序会把文件事件放到队列中,有序、同步地,等事件处理器处理完一个文件事件,才进行下一个
  4. Redis的多路复用程序有多种实现,编译时会自动选择性能高的实现
  5. IO部分太复杂,等我补一点基础再来整理….

时间事件

  1. 时间事件指的是Redis服务器中的定时任务

  2. 时间事件有2类

    • 定时事件:让一段程序在指定时间之后执行一次
    • 周期性事件:让一段程序每个指定时间执行一次
  3. 每个时间事件有3个属性

    • id:全局唯一
    • when:代表时间事件达到的时间
    • timeProc:一个函数,代表上文提到的“一段程序”
  4. 如果是定时事件,事件处理器处理完毕后返回AE_NOMORE,事件被删除

  5. 如果是周期性事件,事件处理器返回非AE_NOMORE,对事件的when属性进行更新,实现周期性的效果

  6. 所有时间事件都放在一个无序链表中,每当事件执行器运行时,无序链表会被全表遍历。一般情况下,Redis服务器中的serverCron,benchmark模式下最多也就2个

  7. serverCron会执行哪些工作

    • 统计时间、内存占用、硬盘占用
    • 清理过期键
    • 回收连接失效的客户端
    • 尝试AOF或RDB
    • 同步 从服务器
    • 定期同步集群

Redis      Redis