首页 > 编程知识 正文

redis io模型,redis单线程还是多线程

时间:2023-05-06 08:30:20 阅读:130343 作者:133

本文简要总结了Redis线程模型、文件事件处理器。

Redis线程模型Redis基于Reactor模式开发了自己的网络事件处理器。 此处理器称为文件事件处理器。

其结构有四个部分:多插槽、IO多路复用器、文件事件分配器、事件处理器。 Redis称为单线程模型,因为文件事件调度程序队列的消耗是单线程的。

消息处理文件事件处理器使用I/O复用(multiplexing )程序同时接收多个套接字,并根据套接字当前正在执行的任务将不同的事件处理器与套接字相关联当监听到的套接字准备执行连接响应(accept )、读)、写)、关闭)、关闭)等操作时,将发生与操作对应的文件事件,此时文件事件处理器与套接字之前相关联文件事件是套接字操作的抽象,当一个套接字准备执行连接响应(accept )、写入、读取和关闭等操作时,会发生文件事件。 通常,一个服务连接到多个套接字,因此可能同时发生多个文件事件。

I/O复用器接收多个套接字,并将发生事件的套接字发送到文件事件调度程序。

虽然可能同时发生多个文件事件,但I/O复用器始终将发生事件的所有套接字放在一个队列中,并通过该队列按顺序、同步地按套接字将套接字传输到文件事件调度程序I/O复用器将继续将下一个套接字转发到文件事件调度程序,直到处理上一个套接字上发生的事件。

文件处理器I/O复用器可以接收多个套接字的ae.h/AE_READABLE事件和ae.h/AE_WRITABLE事件。 如果套接字是可读和可写的,则服务首先读取套接字,然后写入套接字。

服务器最常用的是与客户端通信的连接响应处理器、命令请求处理器和命令响应处理器。

客户端和服务器连接事件示例初始化Redis服务器时,程序将此连接响应处理器与服务器接收套接字的AE_READABLE事件相关联。

当一个客户端使用sys/socket.h/connect函数连接到服务器并接收套接字时,套接字会触发AE_READABLE事件,从而触发连接响应处理器的运行,相应的套接字响应操作

当客户端通过连接响应处理器成功连接到服务器时,服务器将客户端套接字的AE_READABLE事件与命令请求处理器相关联,当客户端向服务器发送命令请求时,套接字为AE_READABLE

如果需要向客户端返回命令,则服务器将客户端套接字的AE_WRITABLE事件与命令返回处理器相关联,并且在客户端准备接收从服务器返回的命令返回时,将AE_WRITABLE事件与命令返回处理器相关联

Redis高性能的三个因素是将非阻塞I/O存储在内存中。 我们采用epoll作为IO复用技术的实现,在Redis内部采用事件处理模型,将连接、读写转换为事件,防止IO发生无谓的事件。 单线程体系结构是用c语言实现的,以避免线程切换和竞争条件造成的消耗。 由于单线程架构,每个指令都需要快速执行完毕,否则可能会阻止Redis。 对于高复杂度的指令keys、hgetall、sembers、zrange等操作,需要考虑数据规模的影响。

参考资料http://redis book.com/preview/event/file _ event.html 3359 www.Jian Shu.com/p/8f2fb 61097 b8

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。