zoukankan      html  css  js  c++  java
  • Redis(七)——事件

    Redis服务器是一个事件驱动程序,主要分文件事件和时间事件。

    一、文件事件

    Redis服务器通过套接字(IP+端口)与客户端(或其他redis服务器)进行连接,文件事件就是服务器对套接字操作的抽象。

    1.文件事件处理器

    每当一个套接字准备好执行连接应答、写入、读取、关闭操作时,就会产生一个文件事件。这些文件事件可能并发出现,但I/O多路复用程序总是会将产生事件的套接字放到队列里,以 有序、同步、每次一个套接字的方式向文件事件分派器传送套接字。当上一个套接字产生的事件被处理完才轮到下一个套接字。

    服务器会为执行不同任务的套接字关联不同的事件处理器,这些处理器是一个个函数,定义了某个事件发生时,服务器应该执行的动作。

    如果一个套接字又可读又可写时,服务器将先读后写。

    处理器可以分为三种:连接应答处理器、命令请求处理器、命令回复处理器

    2.客户端与服务器的通信过程

    二、时间事件

    Redis服务器一些关于时间操作的抽象。

    1.分类

    定时事件:指定时间后执行一次

    周期性事件:隔指定时间就执行一次

    2.属性组成

    id:服务器为时间事件创建的全局唯一标识ID,从小到大递增,新事件的id比旧事件大。

    when:毫秒精度的时间戳

    timeProc:时间事件处理器,一个函数。当时间事件到达时,服务器就会调用相应的处理器来处理事件。

    3.实现

    将所有时间事件都放在一个无序(id有序,when无序)链表中,每当时间事件执行器运行时,遍历链表,对已到达的时间时间调用相应的事件处理器。

    4.实例

    serverCron函数是正常模式下只运行的一个时间事件,主要工作是:

    • 更新服务器的各类统计信息,比如时间、内存占用、数据库占用情况等。
    • 清理数据库中的过期键值对。
    • 关闭和清理连接失效的客户端。
    • 尝试进行持久化操作。
    • 如果是主服务器,则对从服务器定期同步。
    • 如果处于集群模式,对集群进行定期同步和连接测试。

     

    三、事件调度与执行

    • 文件事件随机出现,等待并处理完后,如果没有时间事件到达,那就继续等待处理文件事件。
    • 服务器对文件和时间事件的处理都是同步、有序、原子地执行,服务器不会中途中断事件处理,也不会抢占,因此,处理器尽可能减少程序的阻塞时间,并在需要时主动让出执行权。
    • 时间事件的实际执行时间一般比计划执行时间晚一点。

     参考&引用

    《redis设计与实现》 

  • 相关阅读:
    ASP.NET MVC 以Stream 下载文件
    ITextSharp 初次接触
    Easyui中tree组件实现搜索定位功能及展开节点定位
    lodop 打印控件的使用
    XML IList<T> TO DataSet TO DataTable 相互转换
    JSONToObejct 问题 part 1
    可以动态添加图片的轮播插件
    防止机器注册
    sqlServer 取每组的前几条数据
    log4net 动态设定日志文件名
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/13798658.html
Copyright © 2011-2022 走看看