Redis是单线程模型,为什么效率还这么高呢?【面试】

Redis的效率高低以MySQL为参照物~

Redis是单线程模型,效率为什么这么高,速度这么快?

  1. redis访问内存,MySQL数据库则是访问硬盘。
  2. redis核心功能比数据库的核心功能更简单。详细来说,数据库对于数据的插入删除查询时,可能不仅是简单的插入删除查询操作,也可能会涉及到其他操作,因为数据库中的各种约束使得数据库要做一些额外的工作~  而redis做的核心功能更简单,干的活就少,提供的功能相比于mysql也是少了不少~
  3. 单线程模型,避免了一些不必要的线程竞争开销。redis中每个操作都是短平快的,也就是简单的操作一下内存数据,不是什么特别消耗CPU的操作,就算使用多线程,效率提升也不见得很大~  【这里大家其实也就明白了,为什么不要使用keys * 这种命令,执行时间可能会太长,单线程就一直卡在这个操作了,后续可能就会把MySQL搞崩】
  4. 处理网络IO的时候,使用了epoll这样的IO多路复用机制。

什么是IO多路复用? 

        我们在之前的学习中,例如在TCP的学习中,编写了一个回显服务器。在这里面,我们采用的方法就是使用一个线程来管理一个socket,并且要给每个客户端都分配一个socket,那在实际情况中,必然是会有多个客户端的,也就是会同时存在多个socket。

        我们仔细观察会发现,每个客户端和服务器之间并不是无时无刻的传输数据,大多数时间都是在等待中。因此就提出了IO多路复用,使用一个线程来管理多个socket,例如有三个客户端,处理了客户端1的请求后,进入了等待时间,线程又去处理客户端2的操作,进入等待,又去处理客户端3的操作,当其中有任意一个客户端又有了新的请求后,epoll通过事件通知来处理新的请求~ 但在这里这需要注意,IO多路复用的适用场景必须是,要干的事情交互不是很频繁,大部分时间都是在等待中~

 

你可能感兴趣的:(Redis,面试,redis,数据库,缓存)