redis为什么是单线程及高并发快的三大原因
redis的高并发和快速的原因
- redis是基于内存的,内存的读写速度极快
- redis是单线程的,省去了很多上下文切换线程的时间
- redis采用的多路复用技术,可以处理并发的连接,非阻塞IO内部实现采用epoll
为什么redis是单线程的
- 官方答案:因为redis是基于内存的,CPU不是redis的瓶颈,redis的瓶颈最有可能就是内存的大小或者网络宽带
既然单线程容易实现,CPU又不会称为瓶颈: - 性能指标:关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求
- 详细原因:
(1)不需要各种锁的性能消耗,
(2)单线程多进程的集群方案
(3)CPU消耗
redis单线程的优势和劣势
- 单进程单线程优势
- 代码更清晰,处理逻辑更简单
- 不用去考虑各种锁的问题,不存在加锁和释放锁操作,更不用担心出现死锁导致的性能问题
- 不存在多进程或者多线程导致的切换而消耗CPU
- 单进程单线程的劣势
- 无法发挥多核CPU性能,不过可以通过在单机开多个redis实例来完成
IO多路复用技术
- redis采用网络IO多路复用技术来保证在多连接的时候,系统的高吞吐量
- 多路指的是多个socket链接,复用指的是复用同一个线程,多路复用技术主要由三种select、poll、epoll
epoll是最新的也是目前最好用的多路复用技术 - 采用IO多路复用技术可以让单个线程高效的处理多个链接,且redis在内存中操作数据的速度非常快,这两点使redis具有很高的吞吐量
redis高并发快总结
- redis是基于内存的,内存读写速度极快
- redis是单线程的,省去了很多上下文切换线程的时间
- redis采用IO多路复用技术,使得单线程能高效的处理多个链接,提高吞吐量
redis采用IO多路复用技术,单线程能够高效处理多个链接,非阻塞IO,底层基于epoll
将多个socket连接对应的FD文件描述符注册到epoll中去,
epoll去监听读、写、连接、关闭等事件,而且epoll的事件通知要比select的轮询快很多