0x05.为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
回答重点
单线程设计原因:
- Redis 的操作是基于内存的,其大多数操作的性能瓶颈主要不是 CPU 导致的
- 使用单线程模型,代码简便的同时也减少了线程上下文切换带来的性能开销
- Redis 在单线程的情况下,使用 I/O 多路复用模型就可以提高 Redis 的 I/O 利用率了
6.0 版本引入多线程的原因:
- 随着数据规模的增长、请求量的增多,Redis 的执行瓶颈主要在于⽹络 I/O。引入多线程处理可以提高网络 I/O 处理速度。
扩展知识
我们所说的 Redis 单线程,主要指的是 Redis 网络 I/O 和键值对读写这些操作是由一个线程完成的。(持久化、集群等机制其实是有后台线程执行的)
不过 Redis 并不是一直都单线程的,在 4.0 之后就开始引入了多线程指令,6.0 之后便正式引入了多线程的机制,不过 这里的多线程其只是针对网络请求过程使用多线程,其对于数据读写命令的处理依旧是单线程的。
为什么 Redis 前期不使用多线程的方式,等到 6.0 却又引入呢?
主要是因为我们对 Redis