455 字
2 分钟
为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
- Redis 的性能瓶颈不一定在 CPU
Redis 大部分操作都是内存操作,例如 GET、SET,执行速度非常快。
如果使用多线程处理命令,线程切换、锁竞争反而可能带来额外开销。因此,单线程就能实现很高的吞吐量。
- 避免线程安全问题
多个线程同时操作共享数据时,需要考虑加锁、同步等问题。
Redis 采用单线程执行命令,可以避免多个线程同时执行命令带来的复杂同步问题,代码也更简单。
- 采用 I/O 多路复用机制
Redis 使用 I/O 多路复用机制,可以同时监听多个客户端连接。
例如,1000 个客户端同时连接 Redis,Redis 不需要为每个客户端创建一个线程,而是通过 I/O 多路复用感知 哪些连接已经准备好读写,再处理相应的请求。
注意:单线程不代表只能处理一个客户端连接,而是指核心命令执行主要由一个线程串行完成。
Redis 6.0 引入多线程,主要是为了解决高并发场景下网络 I/O 可能成为瓶颈的问题。它使用多线程并行处理客户端请求的读取和响应的写回,而核心命令执行仍然主要由主线程串行完成。
所以,Redis 6.0 的多线程主要是优化网络 I/O,而不是把命令执行全面改成多线程。
开了多线程之后,Redis 还是线程安全的吗?
是的。多线程只处理网络 IO,命令执行还是单线程串行的。所有写操作都在主线程里完成,数据结构不会被并发修改,天然线程安全。
为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
https://blog.xqcherry.top/posts/interview/redis/redis-single-thread-and-multithreading/ 目录