自学内容网 自学内容网

Redis作为单线程模型,为什么效率高、速度快呢?

前言:
效率高、速度快是相较于数据库来说的(MySQL、Orcale、SQL server)

一、单线程模式的工作流程

这里我们所说的单线程是指:Redis只使用一个线程,来处理所有的命令请求。而并不是说Redis服务器进程内部就真的只有一个进程。Redis内部其实也有多个线程,但那多个线程是在处理 网络IO

在这里插入图片描述
当前这样两个客户端,相当于“并发”的发起了上述请求,但Redis服务器实际上是单线程模型,保证了当前受到的请求是串行执行的。
在这里插入图片描述
那么为什么Redis使用单线程模型,处理业务还是这么快?
这主要取决于Reids的核心业务逻辑,Redis的核心业务逻辑都是短平快,不太消耗CPU资源,也就不太依靠核心数。
弊端
使用Redis必须小心,避免某个操作占用时间长,就会阻塞其他命令的执行。

二、为什么快?

效率高、速度快是相较于数据库来说的(MySQL、Orcale、SQL server)

  1. Redis访问内存,数据库则是访问硬盘。 这两个的速度可能会差上几个数量级。
  2. Redis的核心功能更简单。
    数据库对于数据的插入删除查询,都有更复杂的功能。(例如针对插入删除,数据库中的各种约束,都会使数据库做额外的工作)这样的功能势必会造成更多的开销
    当然消耗多就达标干的活多,这也就是为什么MySQL支持的功能要比Redis多。
  3. Redis是单线程模型,避免了一些不必要的线程竞争开销
    Redis的每个基本操作,都是短平快,只是简单操作一下内存数据,不会产生大的内存CPU开销,即使多个线程,那提升也不大。
  4. 处理网络IO时,使用了epoll这样的IO多路复用机制。
    一个线程可以管理一个socket,针对TCP来说,服务器这每服务一个客户端,就需要为这个客户端安排一个socket。那么一个服务器服务多个客户端,同时就有很多socket。但这些socket并不是无时无刻都在传输数据。大多数socket大多数时间都在静默。
    那么为一个socket分配一个线程,就显得有些浪费了。
    基于上述原因,就出现了IO多路复用–即一个线程管理多个socket

以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞


原文地址:https://blog.csdn.net/2202_75795446/article/details/142372129

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!