美文网首页
Redis事件

Redis事件

作者: Robin92 | 来源:发表于2021-07-27 00:48 被阅读0次

《Redis 设计与实现》
《Redis 设计与实现》图片集

Redis服务器就是个大的事件循环,服务器主要处理以下两种事件:

  • 文件事件:就是通过套接字与服务器连接的事件,包括客户端和其他Redis服务器。
  • 时间事件:一些定时操作。

文件事件

文件事件是对的一种抽象。每当套接字准备好连接应答、写、读、关闭的时候就会产生一个文件事件。

Redis基于Reactor模式开发了自己的网络事件处理器——文件事件处理器。

文件事件处理器以单线程的方式运行,并且搭配了I/O多路复用来监听多个套接字,既实现了高性能的网络通信模型,又保持了内部单线程设计的简单性。

文件事件处理器的四个组成部分

I/O多路复用器会将事件通过队列,以有序、同步、每次一个的方式发送。

Redis 集成了 select、epoll、evport、kqueue 多个I/O多路复用函数库,可以在编译时自动选择系统中性能最高的一个作为底层实现。

时间事件

时间事件分两种:

  • 定时事件:指定时间执行一次(处理器返回 AE_NOMORE);
  • 定期事件:每隔指定时间执行一次(处理器返回下一次事件执行的时间戳)。

Redis中只有定期事件,没有定时事件!(也不知道为什么书上还讲)

时间事件主要有三个属性组成:

  • id,事件ID;
  • when,毫秒精度的时间戳;
  • timeProc,对应的函数处理器。

时间事件的实现

服务器将所有时间事件都放在一个无序链表(不按when排序)中,每次定期执行时都需要遍历整个链表。新事件总是插入在链表头部(插入复杂度O(1),可以说是按ID逆序)

为什么用无序列表而不用有序列表呢?有序列表不是更好吗?
答:因为服务中的时间事件很少。正常模式下只用 serverCron,benchmark下也只用两个时间事件,所以排序无用。

serverCron与服务器的生命周期一致。它默认每秒运行10次,即约100ms执行一次,可通过配置项调整频率。

Redis的事件轮回中,先计算下一次时间事件的时间,然后阻塞等待文件事件的发生,有文件事件的话则先执行,若等到时间事件时间点,也会先把所有到来的文件事件执行完,再进行时间事件。若中间无文件事件,则会一直阻塞到时间事件时间点的到来。

相关文章

  • Redis 事件

    Redis是事件驱动的服务器。事件是对操作的抽象,redis中的事件分为两类: 1)文件事件:redis通过soc...

  • Redis之事件

    本文主要介绍Redis的事件驱动,说明其内部实现机制。 I、上帝视角看Redis的事件驱动 Redis服务器是一个...

  • Redis - 事件

    Redis - 事件 Redis服务器是一个事件驱动程序,服务器处理的事件分为时间事件和文件事件两类。 文件事件处...

  • redis-事件

    redis的主要事件源包括信号,网络,文件和时间事件,文件事件没看到用于做什么。 1、信号事件 redis忽略了S...

  • 13.事件

    事件 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件: 文件事件。file event。Redis...

  • Redis源码研究之事件驱动

    本文主要介绍Redis的事件驱动模型。 建议阅读: 1、Redis 事件的理论说明见:wenmingxing R...

  • Redis源码分析之事件循环

    本篇我们来讲Redis的事件循环,Redis的事件循环会根据系统选择evport、epoll、kqueue或sel...

  • Redis事件

    redis服务器是一个事件驱动型的,主要包括以下两种类型的事件:(1)文件事件:客户端与服务器的socket连接,...

  • Redis 事件

    Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件∶文件事件(file event):Redis服务器...

  • Redis事件

    《Redis 设计与实现》[http://redisbook.com/index.html]《Redis 设计与实...

网友评论

      本文标题:Redis事件

      本文链接:https://www.haomeiwen.com/subject/wfqnmltx.html