我们通常说,Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。
所以,严格来说,Redis 并不是单线程,但是我们一般把 Redis 称为单线程高性能,这样显得“酷”些。接下来,我也会把 Redis 称为单线程模式。而且,这紧接着提问:“为什么用单线程?为什么单线程能这么快?”
为什么用单线程?
多线程会有共享资源的并发访问控制问题,为了避免这些问题,Redis 采用了单线程的模式,而且采用单线程对于 Redis 的内部实现的复杂度大大降低
Redis 采用单线程的原因?
1.Redis 大部分操作是在内存上完成,并且采用了高效的数据结构如哈希表和跳表
具体分析数据结构
2.Redis 采用多路复用,能保证在网络 IO 中可以并发处理大量的客户端请求,实现高吞吐率
具体分析路复用机制
Redis 6.0 版本为什么又引入了多线程?