Redis中的事件(二)

文件事件

文件事件的处理器

Redis为文件事件编写了多个处理器,这些事件处理器分别用于实现不同的网络通信需求,比如说:

  • 1.为了对连接服务器的各个客户端进行应答,服务器要为监听套接字关联连接应答处理器
  • 2.为了接收客户端传来的命令请求,服务器要为客户端套接字关联命令请求处理器
  • 3.为了向客户端返回命令的执行结果,服务器要为客户端套接字关联命令回复处理器。
  • 4.当主服务器和从服务器进行复制操作时,主从服务器都需要关联特别为复制功能编写的复制处理器

在这些事件处理器里面,服务器最常用的要数与客户端进行通信的连接应答处理器、命令请求处理器
和命令回复处理器

连接应答处理器

networking.c/acceptTcpHandler函数是Redis的连接应答处理器,这个处理器用于对
连接服务器监听套接字的客户端进行应答,具体实现为sys/socket.h/accept函数的包装。
当Redis服务器进行初始化的时候,程序会将这个连接应答处理器和服务器监听套接字的
AE_READABLE事件关联起来,当有客户端用sys/socket.h/connect函数连接服务器监听
套接字的时候,套接字就会产生AE_READABLE事件,引发连接应答处理器执行,并执行
相应的套接字应答操作,,如图所示
在这里插入图片描述

命令请求处理器

networking.c/readQueryFromClient函数是Redis的命令请求处理器,这个处理器负责
从套接字中读入客户端发送的命令请求内容,具体实现为unistd.h/read函数的包装。
当一个客户端通过连接应答处理器成功连接到服务器之后,服务器会将客户端套接字的
AE_READABLE事件和命令请求处理器关联起来,当客户端向服务器发送命令请求的时候,
套接字就会产生AE_READABLE事件,引发命令请求处理器执行,并执行相应的套接字读入
操作在这里插入图片描述

命令回复处理器

networking.c/sendReplyToClient函数是Redis的命令回复处理器,这个处理器负责将
服务器执行命令后得到的命令回复通过套接字返回给客户端,具体实现为unistd.h/write
函数的包装。当服务器有命令回复需要传送给客户端的时候,服务器会将客户端套接字的
AE_WRITABLE事件和命令回复处理器关联起来,当客户端准备好接收服务器传回的命令时,
就会产生AE_WRITABLE事件,引发命令回复处理器执行,并执行相应的套接字写入操作。
当命令回复发送完毕之后,服务器就会解除命令回复处理器与客户端套接字的AE_WRITABLE
事件之间的关联。在这里插入图片描述

一次完整的客户端与服务器连接事件示例

假设一个Redis服务器正在运作,那么这个服务器的监听套接字的AE_READABLE事件应该处于监听
状态之下,而该事件所对应的处理器为连接应答处理器。如果这时有一个Redis客户端向服务器发起
连接,那么监听套接字将产生AE_READABLE事件,触发连接应答处理器执行。处理器会对客户端的
连接请求进行应答,然后创建客户端套接字,以及客户端状态,并将客户端套接字的AE_READABLE事件与命令请求处理器进行关联,使得客户端可以向主服务器发送命令请求。之后,假设客户端向主服务器发送一个命令请求,那么客户端套接字将产生AE_READABLE事件,引发命令请求处理器执行,处理器读取客户端的命令内容,然后传给相关程序去执行。
执行命令将产生相应的命令回复,为了将这些命令回复传送回客户端,服务器会将客户端套接字的AE_WRITABLE事件与命令回复处理器进行关联。当客户端尝试读取命令回复的时候,客户端套接字将产生AE_WRITABLE事件,触发命令回复处理器执行,当命令回复处理器将命令回复全部写入到套接字之后,服务器就会解除客户端套接字的AE_WRITABLE事件与命令回复处理器之间的关联在这里插入图片描述

时间事件

Redis的时间时间分为以下两类:

  • 1.定时事件:让一段程序在指定的时间之后执行一次。比如说,让程序X在当前时间的30毫秒之后zhixingyici
  • 2.周期性事件:让一段程序每隔指定事件就执行一次。比如说,让程序Y每隔30毫秒就执行一次。一个时间事件主要由以下三个属性组成:
    id:服务器为事件事件创建的全局唯一ID(标识号),ID号从小到大的顺序递增,新事件的ID号比旧事件的ID号要大
    when:毫秒精度的UNIX时间戳,记录了时间事件的到达(arrive)时间
    timeProc:时间处理器,一个函数。当时间事件到达时,服务器就会调用相应的处理器来处理事件

一个时间事件是定时事件还是周期性事件取决于时间处理器的返回值:

  • 1.如果事件处理器返回ae.h/AE_NOMORE,那么这个事件为定时事件:该事件在达到一次之后就会被删除,之后不再到达
  • 2.如果事件处理器返回一个非AE_NOMORE得整数值,那么这个事件为周期性事件:当一个时间事件到达之后,服务器会根据时间事件处理器返回得值,对时间事件的when属性进行更新,让这个事件在一段时间之后到达,并以这种方式一直更新并运行下去。比如说,一个时间事件的处理器返回整数值30,那么服务器应该对这个时间事件进行更新,让这个事件在30毫秒之后再次到达。目前Redis只使用了周期性事件,而没有使用定时事件

实现

服务器将所有时间事件都放在一个无须链表中,每当时间事件执行器运行时,它就遍历整个链表,查找所有已到达的时间事件,并调用相应的事件处理器。

例子

举个例子。链表中包含了三个不同的时间事件:因为新的时间事件总是i插入到链表的表头,所以三个时间事件分别按ID逆序排序,表头事件的ID为3,中间事件的ID为2,表尾事件的ID为1.
在这里插入图片描述

注意

我们说保存时间事件的链表为无序链表,指的不是链表不按ID排序,而是说,该链表不按when属性的大小排序。正因为链表没有按照when属性进行排序,所以当时间事件执行器运行的时候,它必须遍历链表中的所有时间事件,这样才能确保服务器中所有已到达的时间事件都会被处理。无序链表并不影响事件处理器的性能。正常模式下的Redis服务器只使用serverCron一个时间事件,而在benchmark模式下,服务器也只使用两个时间事件。在这种情况下,服务器几乎是将无须链表退化成一个指针来使用,所以使用无须链表来保存时间事件,并不影响事件执行的性能

时间事件应用实例:serverCron函数

持续运行的Redis服务器需要定期对自身的资源和状态进行检查和调整,从而确保服务器可以长期、稳定地运行,这些定期操作由redis.c/serverCron函数负责执行,它的主要工作包括:

  • 1.更新服务器的各类统计信息,比如时间、内存占用、数据库占用情况等

  • 2.清理数据库中的过期键值对

  • 3.关闭和清理连接失效的客户端

  • 4.尝试进行AOF或者RDB持久化操作

  • 5.如果服务器是主服务器,那么对从服务器进行定期同步

  • 6.如果处于集群模式,对集群进行定期同步和连接测试

Redis服务器以周期性时间的方式来运行servrCron函数,在服务器运行期间,每隔一段时间(100毫秒),serverCron就会执行一次,直到服务器关闭为止,Redis2.6版本中,服务器默认规定serverCron每秒运行10次,
平均每隔100毫秒运行一次。从Redis2.8开始,用户可以通过修改hz选项来调整serverCron的每秒执行次数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/492752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

零基础自学C语言|文件操作

✈为什么使用文件? 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化…

EFI Driver Model(下)-SCSI 驱动设计

1、SCSI简介 SCSI是Small Computer System Interface(小型计算机系统接口)的缩写,使用50针接口,外观和普通硬盘接口有些相似。SCSI硬盘和普通IDE硬盘相比有很多优点:接口速度快,并且由于主要用于服务器&…

记一次Tomcat启动失败的经历

首先,下载tomcat10.1.20后,双击启动bin下的startup.bat闪退,查了资料,说是依赖JDK环境和JRE环境,当然,我Java是能正常用的,毕竟写了这么多东西它有没有我还不清楚吗 可问题就来了,既…

软件应用实例,租赁系统软件操作教程,脚手架租赁管理集装箱租赁管理系统教程

软件应用实例,租赁系统软件操作教程,脚手架租赁管理集装箱租赁管理系统教程 一、前言 以下软件操作教程以,佳易王租赁管理系统软件V17.0为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、软件可以记录&#x…

GEE土地分类——分类后样本点值提取至点过程中,导出的csv数据表中不存在geometry的位置信息

值提取至点导出的csv数据表中不存在geometry的位置信息 错误提示: {"type":"MultiPoint","coordinates":[]} 问题分析 问题主要出现在在reduceregions中所使用的第二个参数中。在reduceregions中,第二个参数用于指定geometry信息,以便将r…

约克中央空调YES-will系列,舒适冷暖与高品质家居的优选

漫漫寒冬,室内一片寒意,开启空调多久才能享受到暖意?如果冬季气温较低,空调能否保持正常的制热运行? 炎炎夏季,即便在室内也同样是“暴汗”不断,身上黏糊糊,什么样的家用中央空调才能快速制冷,让全家人感受到舒适,同时又能避免传统空调直吹带来的一系列问题? 遇上梅雨季节…

【采购季】全网云服务器采购季活动大盘点 网站博客搭建、程序员职场毕业神器 低至50/年 阿里云 京东云 腾讯云

《最新对比表》已更新在文章头部—腾讯云文档,文章具有时效性,请以腾讯文档为准! 【腾讯文档实时更新】云服务器1分钟教会你如何选择教程 2024-开年采购活动 云服务器专区 京东云 阿里云 腾讯云 配置最新价格表 与 官方活动地址 ​ 当前活动…

双碳目标下基于全球模式比较计划CMIP6与区域气候-化学耦合模式WRF-Chem的未来大气污染变化模拟教程

原文链接:双碳目标下基于全球模式比较计划CMIP6与区域气候-化学耦合模式WRF-Chem的未来大气污染变化模拟教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599209&idx7&sn2fb78bcb18e6ec709853a7595d8822d9&chksmfa82058ecdf58c9852bf4…

鸿蒙HarmonyOS应用开发之使用Node-API接口进行异步任务开发

场景介绍 napi_create_async_work是Node-API接口之一,用于创建一个异步工作对象。可以在需要执行耗时操作的场景中使用,以避免阻塞主线程,确保应用程序的性能和响应性能。例如以下场景: 文件操作:读取大型文件或执行复…

朋友圈运营攻略,还有多号群发朋友圈教程

为什么需要打造朋友圈? 私域朋友圈运营运营者和私域流量理论上其实就是“网友”的关系 要维持稳定的社交关系,做好私域流量运营,就必须持续地进行自身价值塑造!而朋友圈就是最好的“战场” 打造优质朋友圈的关键点: …

09 网络ARP请求,响应,ICMP协议

arp协议_arp请求_arp回应 ICMP包构造ping搜狐服务器参考 #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <linux/if_packet.h> #include <linux/if_ether.h> #include <string.h> #includ…

文案转化率低?快看看这两个坑你踩没踩

对于很多中小企业来说&#xff0c;无论是来拓市场还是获客&#xff0c;软文营销都会成为他们的主要营销方式&#xff0c;比较软文营销的成本较低&#xff0c;同时门槛也不高。但是也有品牌发现&#xff0c;自己和团队辛苦构思了几周写出的文案&#xff0c;但是效果不是很好。今…

五、Elasticsearch 集成

目录 5.1 Spring Data 框架集成5.1.1 Spring Data 框架介绍5.1.2 Spring Data Elasticsearch 介绍5.1.3 Spring Data Elasticsearch 版本对比5.1.4 集成步骤 5.1 Spring Data 框架集成 5.1.1 Spring Data 框架介绍 Spring Data 是一个用于简化数据库开发的开源框架。其主要目…

前端 CSS 经典:grid 栅格布局

前言&#xff1a;Grid 布局是将容器划分成"行"和"列"&#xff0c;产生单元格&#xff0c;然后将"项目"分配给划分好的单元格&#xff0c;因为有行和列&#xff0c;可以看作是二维布局。 一 术语 1. 容器 采用网格布局的区域&#xff0c;也就是…

【机器学习之旅】概念启程、步骤前行、分类掌握与实践落地

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

六、保持长期高效的七个法则(二)Rules for Staying Productive Long-Term(2)

Rule #5 - If your work changes, your system should too. 准则五&#xff1a;如果你的工作变了&#xff0c;你的系统也应该改变。 For some, work will be consistent enough to not need major changes.You simply stick to the same system and you’ll get the results y…

高精密基准源 国产替代 REF191 ADR4520 ADR420 ADR430 ADR440 REF5020 MAX6126

高精密基准源 国产替代 REF191 ADR4520 ADR420 ADR430 ADR440 REF5020 MAX6126 ADR03 REF03 REF192 AD580 AD780 ADR441 ADR4525 ADR431 ADR421 REF5025ADR423 ADR433 ADR443 ADR4530 REF193 AD780 ADR06 REF5030ADR434 ADR444 ADR4540 REF198 REF5040ADR425 ADR435 ADR445 AD…

成功推出全新生成式AI的四大原则

生成式AI有望从根本上打开一扇新世界机遇的大门&#xff0c;以满足各行各业的客户需求。从提供个性化回复的对话式聊天机器人&#xff0c;到各种应用的代码&#xff0c;再到营销传播的目标内容&#xff0c;生成式AI正在彻底改变企业的运作方式。为竞相提供卓越的客户体验&#…

分布式系统的发展史

目录 &#x1f433;今日良言&#xff1a;且视他人之疑目如盏盏鬼火&#xff0c;大胆地去走自己的夜路 &#x1f407;一、常见概念 &#x1f407;二、发展史 今日良言&#xff1a;且视他人之疑目如盏盏鬼火&#xff0c;大胆地去走自己的夜路 一、常见概念 在正式介绍分布式系…

16、OpenFeign和Sentinel集成实现fallback服务降级

注&#xff1a;本篇文章主要参考周阳老师讲解的cloud进行整理的&#xff01; 1、需求说明 cloudalibaba-consumer-nacos-order83 通过OpenFeign调用 cloudalibaba-provider-payment9001 1、 83 通过OpenFeign调用 9001微服务&#xff0c;正常访问OK 2、 83 通过OpenFeign调用 …