Redis 是单线程。
- Redis 单线程到底指什么?
Redis 单线程是指的是执行 Redis 命令的核心模块是单线程的,而不是整个 Redis 实例就一个线程,Reids 其它的模块还有各自模块的线程。
Redis 基于 Reactor 模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。 - Redis 不仅仅是单线程
一般来说 Redis 的瓶颈并不在 CPU,而在内存和网络。如果要使用 CPU 多核,可以搭建多个 Redis 实例来解决。
其实,Redis 4.0 开始就有多线程的概念了,比如 Redis 通过多线程方式在后台删除对象、以及通过 Redis 模块实现的阻塞命令等。Redis 6.0 提出了 Threaded IO ,是指的是IO 处理方面上的多线程,但是执行命令的核心模块还是单线程的。 - 为什么网络处理要引入多线程?
Redis 的瓶颈并不在 CPU,而是内存和网络。
内存不够的话,可以加内存或者做数据结构优化和其他优化等,但是网络的性能优化才是大头,网络 IO 的读写在 Redis 整个执行期间占用了大部分的 CPU 时间,如果把网络处理这部分做成多线程处理方式,那对整个 Redis 的性能会有很大的提升。
但是 Redis 6.0 版本是刚发布的,应用方面还没有全面覆盖,IO 多线程处理模式是默认不开启的,需要配置文件中开启配置线程数。