Redis使用了单线程来处理用户请求命令,不会有多条命令同时执行。
Redis单线程快的原因:
- 纯内存访问。Redis将所有数据放在内存中,而内存的响应时长很短,约100ns。
- 非阻塞I/O,Redis使用了 epoll 作为 I/O 多路复用技术的实现,且Redis的事件处理模型将 epoll 的连接、读写、关闭转换为了事件,不会在网络IO上浪费太多时间。
- 单线程避免了多线程时的线程切换和竟态产生的消耗。
优势:
- 单线程可以简化数据结构和算法的实现。
- 避免线程切换和竟态产生消耗,对于服务端开发来说,锁和线程切换对性能影响很大。
缺点:
- 若命令执行时间过长,会造成其它命令的阻塞。
在redis6.0以上,redis使用了多线程,处理用户请求的还是单线程,其他线程用来处理数据的读写和协议解析。redis 的性能瓶颈在于网络IO,而不是CPU,使用多线程能提升IO的读写效率。