前言:
我们知道redis服务器是一个事件驱动程序,它需要处理两类事件,分别是文件事件和时间事件。
那么redis事件处理流程是什么样的呢?我们一起来看看下面的图:
aeMain函数通过调用aeProcessEvents函数来进行文件事件和时间事件的调度和执行。aeEventLoop中记录了事件相关的信息。首先通过aeSearchNearestTimer函数获取最短的时间事件的执行时间间隔n,然后调用aeApiPoll函数获取监听到的套接字,最后执行与套接字向对应的事件处理函数rfileProc和wfileProc,最后再执行时间事件函数processTimeEvents
文件事件
Redis的基于Reactor模式开发了自己的网络事件处理器,这个处理器被称为文件事件处理器(file event handler):
文件事件处理器使用IO多路复用程序来监听多个套接字,并根据套接字目前执行的任务为套接字关联不同的事件处理器
当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作,当文件事件产生时,这些文件事件处理器就会调用套接字之前关联好的事件处理器来处理事件
文件事件处理器的构成
(学习视频分享:redis视频教程)
文件事件的处理器
Redis为文件事件编写了多个处理器:
连接应答处理器:当Redis服务器进行初始化是,程序会将这个连接应答处理器和服务监听套件字的AE_READABLE事件关联起来,当有客户端用connect函数连接服务器监听套接字是,套接字就会产生AE_READABLE事件,引发连接应答处理器执行,并执行相应的套接字应答操作
命令请求处理器:当一个客户端通过连接应答处理器成功连接到服务器之后,服务器会将客户端套接字的AE_READABLE事件和命令请求处理器关联起来,当客户端向服务器发送命令请求时,套接字就会产生AE_READABLE事件,引发命令请求处理器执行,并执行相应的套接字读入操作
命令回复处理器:当服务器有命令回复需要传递给客户端时,服务端会将客户端套接字的AE_WRITABLE事件和命令回复处理器关联起来,当客户端准备好接收服务器传回的命令回复时,就会产生AE_WRITABLE事件,引发命令回复处理器执行,并执行相应的套接字写入操作
一次完整的客户端与服务端连接事件
服务器监听套件字的AE_READABLE事件,当客户端发送连接请求产生AE_READABLE事件,服务端会对客户端的连接请求进行应答,将客户端套接字的AE_READABLE事件与命令请求处理器关联,客户端可以向服务端发送命令请求了
客户端向服务端发送一个命令请求,客户端套接字将产生AE_READABLE事件,引发命令处理器去执行,执行命令将产生相应的命令回复,服务端将客户端套接字的AE_WRITABLE事件与命令回复处理器关联
客户端尝试读取命令回复时,客户端套接字将产生AE_WRITABLE事件,触发命令回复处理器执行,当命令回复处理器将命令回复全部写入套接字之后,服务器就会接触客户端套接字的AE_WRITABLE事件与命令回复处理器之间的关联
时间事件
Redis的时间事件分为定时事件和周期性事件。一个时间事件由三个属性组成:
id:服务器为时间时间创建的全局唯一IDwhen:记录了时间时间的到达时间(毫秒精度的UNIX时间戳)timeProc:时间事件处理器
服务器所有的时间事件都放在一个无序链表中,每当时间事件执行器运行时,它就遍历整个链表,查找所有已到达的时间事件,并调用相应的事件处理器。正常模式下的Redis服务器只使用serverCron一个时间事件,而在benchmark模式下,服务器也只使用两个时间事件,所以不影响事件执行的性能。
相关推荐:redis数据库教程
以上是redis事件处理流程分析的详细内容。更多信息请关注PHP中文网其他相关文章!

Redis是现在最热门的key-value数据库,Redis的最大特点是key-value存储所带来的简单和高性能;相较于MongoDB和Redis,晚一年发布的ES可能知名度要低一些,ES的特点是搜索,ES是围绕搜索设计的。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于redis的一些优势和特点,Redis 是一个开源的使用ANSI C语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式存储数据库,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis Cluster集群收缩主从节点的相关问题,包括了Cluster集群收缩概念、将6390主节点从集群中收缩、验证数据迁移过程是否导致数据异常等,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于原子操作中命令原子性的相关问题,包括了处理并发的方案、编程模型、多IO线程以及单命令的相关内容,下面一起看一下,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了bitmap问题,Redis 为我们提供了位图这一数据结构,位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已,希望对大家有帮助。

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,下面一起来看一下,希望对大家有帮助。

redis error就是redis数据库和其组合使用的部件出现错误,这个出现的错误有很多种,例如Redis被配置为保存数据库快照,但它不能持久化到硬盘,用来修改集合数据的命令不能用。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器