redis为何是单线程设计,以及Redis为何快

1 redis快的缘由

https://zhuanlan.zhihu.com/p/34438275web

一、彻底基于内存,绝大部分请求是纯粹的内存操做,很是快速。数据存在内存中,相似于HashMap,HashMap的优点就是查找和操做的时间复杂度都是O(1);redis

二、数据结构简单,对数据操做也简单,Redis中的数据结构是专门进行设计的;网络

三、采用单线程,避免了没必要要的上下文切换和竞争条件,也不存在多进程或者多线程致使的切换而消耗 CPU,不用去考虑各类锁的问题,不存在加锁释放锁操做,没有由于可能出现死锁而致使的性能消耗;数据结构

四、使用多路I/O复用模型,非阻塞IO;多线程

五、使用底层模型不一样,它们之间底层实现方式以及与客户端之间通讯的应用协议不同,Redis直接本身构建了VM 机制 ,由于通常的系统调用系统函数的话,会浪费必定的时间去移动和请求;svg

2 redis 为何是单线程的

由于Redis是基于内存的操做,CPU不是Redis的瓶颈,Redis的瓶颈最有多是机器内存的大小或者网络带宽。既然单线程容易实现,并且CPU不会成为瓶颈,那就瓜熟蒂落地采用单线程的方案了(毕竟采用多线程会有不少麻烦!,避免使用锁)。
正是因为在单线程模式的状况下已经很快了,就没有必要在使用多线程了!可是,咱们使用单线程的方式是没法发挥多核CPU 性能,不过咱们能够经过在单机开多个Redis 实例来完善!
警告:这里咱们一直在强调的单线程,只是在处理咱们的网络请求的时候只有一个线程来处理,一个正式的Redis Server运行的时候确定是不止一个线程的,这里须要你们明确的注意一下!函数