分布式缓存 Redis - 理解Redis的单线程操作
Posted Frank Q
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式缓存 Redis - 理解Redis的单线程操作相关的知识,希望对你有一定的参考价值。
开篇
一般情况下,我们会在很多场景中使用到缓存,而缓存一般会分为本地缓存(其实咱们常见的ConcurrentHashMap就是可以用于实现本地缓存的一种常见形式),而分布式缓存中,多以Redis比较常见,使用也是最广的。
本文将会从多个方面简要的描述Redis的基本理论(本文暂时不探讨集群相关内容,以Redis单机作为基本例子);
Redis单线程操作是如何进行的?
由于Redis的操作基本都会在内存中进行,所以必然会出现的问题便是宕机重启后如何快速恢复数据;为了保证Redis的高性能,所以Redis使用单线程来处理读写请求;
Redis内部使用文件事件处理器(FileEventHandler:记录传入的每一个IO流的状态,并且同时起到了管理IO的作用),该处理器都是单线程的处理器;
Redis使用IO多路复用的机制配合内部的文件事件处理器,监听了多个Socket连接,然后将产生的事件压入到了队列中;然后文件事件处理器根据对应的事件分配不同的处理器来进行处理;
其过程简单描述如下:
1、Redis 进程启动后,会打开SocketServer端口供Client连接;
2、每一个客户端都对应一个SocketClient,会想端口发送连接请求,这时,当Redis进程客户端连接数正常,会产生AE_READABLE事件,这时IO多路复用发挥作用,由于监听多个Socket所以可以很方便的将各种事件压入到内存队列中;
3、当有事件压入到内存队列中的时候,FileEventHandler处理器便开始发挥它的功能,根据不同的事件开始分配不同的处理器(连接应答处理器,命令回复处理器,命令请求处理器)比如上述2中所描述的事件,会被分配到连接应答处理器中;
4、连接应答处理器开始处理事件,创建对应的Socket并将结果返回给Client;
5、Client与Redis服务成功建立连接之后,发送redis命令,按照上述过程,将对应的时间压入队列,文件事件处理器,将命令提供给命令请求处理器处理;命令请求处理器处理完成后,由命令回复处理器进行后续的返回结果操作;
以上是关于分布式缓存 Redis - 理解Redis的单线程操作的主要内容,如果未能解决你的问题,请参考以下文章