https://juejin.cn/post/7068574407748222989

单线程:redis 命令执行还是单线程执行的 文件事件处理器是在单线程上运行的

Redis 的单线程,主要是指事件处理上,但是 Redis 的其他功能,如持久化、异步删除这些都是由额外的线程执行的。在 Redis6.0 版本的多线程并非彻底的多线程,I/O 线程只能同时执行读或者同时执行写操作。在开启多线程后,并不会存在线程的安全问题,因为 Redis 的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程顺序执行。

前言

Redis,在工作中我们经常使用到,这也决定了它是面试的常客。我们总说Redis是单线程的,其实这也没错也错了,因为Redis不仅仅是单线程,从4.0开始,Redis就引进了多线程的概念。

单线程

我们常说的 Redis 单线程其实是指事件处理上的。在了解事件处理上,先了解下 redis 的工作机制。

Redis 服务器是一个事件驱动程序,服务器需要处理一下两类事件:

Redis 将文件事件和时间事件进行抽象,时间轮询器会监听 I/O 事件表,一旦有文件事件就绪,Redis 就会优先处理文件事件,接着处理时间事件。

在所有事件处理上,Redis 都是以单线程形式处理,所以说 Reids 是单线程的。

同时,Redis 基于 Reactor 模式开发了自己的 I/O 事件处理器,也就是文件事件处理器,Redis 在 I/O 事件处理上,采用了 I/O 多路复用技术,同时监听多个套接字,并为套接字关联不同的事件处理函数,通过一个线程实现了多客户端并发处理。