Redis的单线程模型
对于redis来说,它最大的特点无非就是快,而我们又知道,redis是单线程模型,那么它为什么会快呢?
- 首先我们说它快,肯定是有参照物的,这里一般是拿关系型数据库来进行对比,就比如MySQL
- redis它的数据都是放在内存上的,mysql是放在硬盘上,从这一点来看,内存上访问数据肯定是比硬盘上访问数据要快的多
- redis它的网络IO处理是使用异步io的多线程epoll模型,而且它还将各种命令的处理当成一个个的事件,这就保证了它的io速度是很快的,但这里就会有疑问, redis不是单线程模型吗?这里我想告诉的是redis的单线程模型指的是它的命令处理是单线程的,也就是串行化的,并不是说redis的整个服务器都是单线程。
- redis是单线程,这就保证了它不会有线程安全的问题,更不会有线程竞争,以及线程切换的资源消耗。
redis的单线程模型,它处理命令是串行化的,我们就想象好比redis就是一个食堂的窗口,而这个食堂只会有一个窗口, 当学生要吃饭的时候就会来窗口排队,就好比redis的命令到来了, 需要服务器去处理这些命令,那么这些命令就会排队等待处理。
所以由于redis的这种单线程模型,注定了它绝对不能允许有那种需要很长时间去处理的命令出现,因为这就导致后面的命令都得不到处理,那么redis就会阻塞住。