Redis线程模型
Redis真的是单线程的吗 ?
Redis的单线程主要是指处理网络IO请求和键值对的读写是单线程的,
其他的操作比如持久化, 集群数据同步等, 则是依赖多线程来处理的
为什么说Redis单线程速度这么快?
单线程的优势
- Redis是基于内存的Nosql数据库, 绝大部分网络请求在内存上完成, 速度快.
- Redis使用了单线程, 避免了多线程的资源切换或者竞争.
- 使用IO多路复用模型, 使其在IO网络操作中能并发的处理大量的客户端请求.
单线程的劣势 :
如果某个命令执行时间过长, 会造成其他命令的阻塞, 这个对于Redis这个高性能服务器来说是致命的
IO多路复用
- 多个客户端对应多个服务端socket来处理(监听)
- 每个socket将读请求或者写请求发送给IO多路复用程序
- IO多路复用程序再将各个请求依次放入队列中, 这样一个线程就可以先后处理各个请求了
- 文件事件分派器再一个一个进行处理并且对其分类
- 最后处理完成就返回给客户端