Redis是单线程,主要指Redis的网络IO和键值对读写是由一个线程来完成的,这也是Redis对外提供键值存储服务的主要流程。
Redis的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。
单线程Redis为什么可以那么快
- Redis的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。
- Redis采用了多路复用机制,使其在网络IO操作中能并发处理大量客户端请求,实现高吞吐率。
基于多路复用的高性能I/O模型
在Redis只运行单线程的情况下,该机制允许内核中,同时存在多个监听套接字和已连接套接字。
内核会一直监听这些套接字上的连接请求或数据请求,一旦有请求到达,就会分发给不同的事件处理器,事件处理器,事件处理器就会异步调用相应的函数,并且这些事件就会被放进一个事件队列,交给Redis 线程处理,这就实现了一个Redis线程处理多个IO流的效果。
Redis网络框架调用epoll机制,让内核监听这些套接字。在请求到达时能通知Redis 线程,针对不同事件的发生,调用相应的处理函数。
这些事件会被放进一个事件队列,Redis单线程对该事件队列不断进行处理,这样一来,Redis无需一直轮询是否请求实际发生,这就可以避免CPU资源浪费。同时,Re