Redis是单线程的,为什么还那么快?
1.redis是基于内存的
2.redis使用I/O多路复用模型
关于I/O多路复用:
- 多路:多个客户端连接
- 复用:使用单线程就能够实现同时处理多个客户端的连接
单线程去监控多个Socket,当有某个Socket可读可写是回返回通知,避免无效等待,一旦有请求到达,就会交给Redis线程处理,实现了Redis单线程处理多个IO流的效果
Redis监听Socker的方式用:
- select
- poll
- epoll
select和poll是按照轮询的方式去查找就绪的Socker,而epoll能精准的找到就绪的Socker并把它写入用户空间,不用挨个遍历Socket来判断是否就绪,提升了性能
Redis的网络模型
IO多路复用模型+事件派发处理器
Redis6.0以后引入了多线程
对接收参数转化指令和命令回复做了优化,减少了网络IO导致性能下降的问题。不过命令执行的时候仍然是单线程的