【redis】redis是单线程的,但为什么还是这么快?

4 阅读1分钟

提问:redis是单线程的,但为什么还是那么快?

回答:
·redis是纯内存操作,执行速度非常快
·采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题
·采用I/O多路复用模型,非阻塞IO

提问:能解释下I/O多路复用模型?

回答:
1.I/O多路复用
是指利用单个线程来同时监听多个socket,并在某个socket可读、可写时得到通知,从而避免无效的等待,充分利用cpu资源。目前的I/O多路复用都是采用epoll模式实现,他会在通知用户进程socket就绪的同时,把已就绪的socket写入用户空间,不需要挨个遍历socket来判断是否就绪,提升了性能。
2.redis网络模型
就是使用I/O多路复用结合事件的处理器来应对多个socket请求
·连接应答处理器
·命令回复处理器,在redis6.0之后,为了提升性能,使用了多线程来处理回复事件
·命令请求处理器,在redis6.0之后,将命令的转换使用了多线程,增加命令转换速度,在命令执行的时候,依然是单线程