Redis单线程还快的原因
Redis Server是多线程的,Redis单线程指的是请求处理整个流程是单线程的!
单线程还快的原因
-
纯内存操作:
Redis数据存储在内存中,速度很快。
-
非阻塞IO多路复用机制:
Redis 采用了多路复用机制,使其在网络 IO 操作中能并发处理大量的客户端请求,实现高吞吐率。
-
非CPU密集型任务:
Redis大部分操作并不是CPU密集型任务,即使是单线程也问题不大(组成集群即可利用多核CPU)。Redis瓶颈在于内存和带宽。
-
单线程:
避免了线程上下文切换和竞争资源产生的消耗。
-
高效的数据结构:
Redis底层采用了如哈希表、跳表这样的高效数据结构。
补充
redis 非阻塞的IO多路复用机制
IO多路复用:使用单线程实现同时处理多个客户端的连接。
在 Redis 只运行单线程的情况下,该机制允许内核中,同时存在多个监听套接字和已连接套接字。内核会一直监听这些套接字上的连接请求或数据请求。一旦有请求到达,就会交给 Redis 线程处理,这就实现了一个 Redis 线程处理多个 IO 流的效果。
跳表:
在有序链表的基础上增加多级索引,实际是一种增加了前向指针的链表。
跳表查找任意数据的时间复杂度为O(logn)
Redis Server
Redis Server是多线程的,除了请求处理流程是单线程处理之外,Redis内部还有其他工作线程在后台执行,它负责异步执行某些比较耗时的任务,例如AOF每秒刷盘、AOF文件重写都是在另一个线程中完成的。在新版本的Redis中,大key的删除、请求数据的协议解析等操作都是有多线程异步完成的。