Redis的单线程模型,以及Redis为什么这么快!!!

本文探讨了Redis的单线程模型如何确保命令请求的串行执行,避免线程安全问题,以及为何其能利用内存优势实现快速响应。同时,通过IO多路复用机制如epoll,单线程如何在网络处理中提高效率并节省系统资源。
摘要由CSDN通过智能技术生成

Redis的单线程模型:

说Rsdis是单线程模型,不是Redis服务器内部真的就只有一个线程在工作,还有别的线程在处理网络IO等工作。只是有一个核心的线程在处理所有的命令请求。

这里还要再强调一下Redis是客户端/服务器架构的程序。

在对多线程中,我们要考虑线程安全问题:比如两个线程同时对一个进行自增操作,最终的结果可能是只自增了一次。Redis服务器在同一时刻会接收到很多客户端的请求,会不会也出现类似的问题呢?答案是并没有。

因为Redis在处理命令请求的时候是单线程模型,保证了收到多个的多个请求是串行执行的。多个命令请求到达Redis服务器是在队列中排队的,在等待Redis服务器一个一个的取出命令在执行,微观上讲Redis服务器是串行/顺序执行这个多个命令的,不会产生线程安全问题。

Redis能够使用单线程模型很好的去工作,是因为它的业务都是直接去操作内存的短平快的不太消耗CPU资源的操作,随之而来弊端就是,要特别小心某个命令执行时间不能太长,这样会阻塞其他的命令。

Redis为什么这么快?

没有对比就没有伤害,Redis的快是相对于数据库来说的;(MySQL、oracle、sql server)

  1. Redis将数据以键值对的形式存储到内存,而数据库是将数据存储到硬盘的,所以速度较快
  2. Redis的核心功能都是比较短平快的操作,数据库查询等操作相对复杂势必会有更多的开销
  3. 单线程模型,避免了一些不必要的线程竞争产生的开销。因为Redis处理的都是短平快,不是特别消耗CPU的操作,因此没有什么必要引入多线程去提高效率。
  4. 网络处理的时候,使用了epoll这样的IO多路复用机制。

浅谈IO多路复用机制:

IO多路复用机制就是一个线程管理多个socket,针对TCP来说,服务器这边每服务一个客户端都会给这个客户端安排一个socket。一个服务器服务多个客户端就会有多个socket,但是这些socket并非同时活跃,这么多socket大部分时间都是静默的。这样的话就可尝试用一个线程去管理多个socket。比如室友四个人去小吃街买饭:

多线程:每个人去不同摊位买自己的饭就相当于同时开了四个线程,系统资源开销比较大但效率很高,买四份饭只需要花做一份饭的时间。

单线程:一个人分别去四个摊位买饭等待做饭,虽然系统开销小,但是需要花费做四份饭的时间

IO多路复用机制:也是相当于一个人买饭,但是这个人不会在摊位上瞎等,而是等待的过程中去买另外几份饭,那个老板做好了,喊同学一声,同学就过去拿饭。相当于一个线程管理多个socket,一定程度上提高效率,节省系统资源开销。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值