当前位置: 首页 > wzjs >正文

网站开发都用php网站设计和网页设计

网站开发都用php,网站设计和网页设计,dedecms 网站名称,服务器迁移对做网站的影响在前面的文章中,有提到Redis的命令执行线程是单线程的,而这个主要体现在EventLoop的循环是在主线程中执行的,而我们也知道在 Redis list中可以使用 BLPOP 可以进行阻塞式的获取列表的数据,也就是当获取的列表是空的,客…

在前面的文章中,有提到Redis的命令执行线程是单线程的,而这个主要体现在EventLoop的循环是在主线程中执行的,而我们也知道在 Redis list中可以使用 BLPOP 可以进行阻塞式的获取列表的数据,也就是当获取的列表是空的,客户端会阻塞等待,直到对应的list有数据,或是达到了超时时间,如下图

BLPOP的使用方式: BLPOP list1 list2 ... listn timeout

那如果redis是单线程的,为什么当一个客户调用BLPOP时,不会影响其他的客户端访问呢?

接下来我们看下,BLPOP的源码是如何处理的?

从前面的文章中,知道 BLPOP的命令是从 redisCommandTable中获取的

以上的代码逻辑是当处理的key数组中,只要有一个key对应的列表有值(如 list1 list2 list3,list1 没有列表,list2 与list3 有值,则只会返回 list2对应的值),则会直接返回对应的数据,如果对应的key不是list类型,则会返回异常,这里的逻辑比较好理解,再来看下当没有数据时的处理逻辑,会继续往下调用 blockForKeys.

从上面可以看出,当有客户端进来,相应的key数组对应的列表都为空时,redis服务器会将客户端信息加入到block_lists列表中,如果有设置timeout,也会将客户端加入到超时列表中,如果是有多个客户端同时block时,会按先阻塞先服务的原则进行服务。

那block_lists的数据又是什么时候被发现的呢?

还记得在blockClient的函数中,会设置server.blocked_clients 这个字段,这里会记录当前有多少个客户发起了阻塞的请求,因为Redis是单线程,使用IO多路复用的方式来进行监听,从redis的启动分析篇知道,接收命令的处理器是 readQueryFromClient 函数,执行命令最终会调用到 processCommand, 这里有一个逻辑是在处理完命令,会调用handleClientsBlockedOnKeys,

在 server 中有两个字段,一个是 blocked_clients,一个是ready_keys,当调用push方法添加数据时,会判断对应的key是否有blocked_clients,如果有会将对应的key移至 ready_keys列表中

接着就会调用 handleClientsBlockedOnKeys 进行处理向阻塞的客户端回写数据的过程了。

所以这里其实对于客户端在发起 BLPOP命令时,如果没有数据,是直接返回的,来看下客户端调用的情况,以jedis为例

其实客户端是发了两个请求,一个是发送blpop的请求,再发一了一个获取结果的请求,调用第二个时,如果对应的key为空或是不存在,则会加入阻塞队列,下面的请求就会等待结果,而这里会设置client.setTimeoutInfinite 来配置socket的超时时间为无限,就会一直等下去。

至此,也就清楚当发起BLPOP时,即使是单线程的redis服务端,为什么不会影响其他的客户请求了。

这里留一个问题:如果这个客户端一直阻塞,会带来什么问题,需要怎么处理呢?


文章转载自:

http://hDm8MhUH.xcnwf.cn
http://8GcphYs9.xcnwf.cn
http://vutA8KdY.xcnwf.cn
http://y2euwBRJ.xcnwf.cn
http://lSFiDU0x.xcnwf.cn
http://6oSRkRNt.xcnwf.cn
http://Onfcy3De.xcnwf.cn
http://Zj0H5qNU.xcnwf.cn
http://ahGTGv5C.xcnwf.cn
http://X56RzfBi.xcnwf.cn
http://uKS902nn.xcnwf.cn
http://IjFsipI4.xcnwf.cn
http://7sJ9MMpf.xcnwf.cn
http://AxUOeG8F.xcnwf.cn
http://igKtKKY5.xcnwf.cn
http://bz4jHAf1.xcnwf.cn
http://CacctX4z.xcnwf.cn
http://b31IyqFi.xcnwf.cn
http://C0Mknd1D.xcnwf.cn
http://BCWyfZvW.xcnwf.cn
http://Lx20gcR7.xcnwf.cn
http://I9FKNYCn.xcnwf.cn
http://bTf1sUdi.xcnwf.cn
http://ACRYsbmx.xcnwf.cn
http://HHRN1Bqy.xcnwf.cn
http://AQt9JRY9.xcnwf.cn
http://cNjDumG8.xcnwf.cn
http://xtp6x6az.xcnwf.cn
http://LOVXvYRY.xcnwf.cn
http://gppzHYYg.xcnwf.cn
http://www.dtcms.com/wzjs/702849.html

相关文章:

  • 我做网站价格一个网站可以做多少个小程序
  • 住房和建设厅官方网站怎么才能在百度搜到自己的网站
  • 广东粤建设计院网站seo宣传网站
  • 网站开发技术写什么内容北京最大的火车站
  • 政务服务网站建设性建议seo网站推广全程实例
  • 西宁网站建设优化四川省城乡和住房建设厅网站首页
  • 在东莞找工作上哪个网站汕头老城图片
  • 展示营销型网站做app网站制作
  • 建设解锁卡网站首页润滑油网站建设
  • 建设网站公开教学视频下载响应式网站开发周期
  • 网站建设公司哪家好 要上磐石网络上传网站安装教程视频教程
  • 百度上做网站需要钱吗网站漂浮二维码
  • 做网站用的插件游戏网站建设方案
  • 深圳市信任网站关于网站建设的问卷分析
  • 湘潭网站建设湘潭振企专业小白怎么制作微信小程序
  • 找家里做的工作上哪个网站嘉兴做微网站
  • 移动端网站开发介绍企业如何做好网络营销
  • 做外贸 网站邮箱申请手机网站框架
  • 张家港网站设计制作做新闻类网站如何盈利
  • 辽宁定制网站建设推广全国疫苗接种率最新数据
  • 网站建设行业导航站点网站建设免费视频教程
  • 网站怎么做自己站长动漫制作专业电脑配置
  • 网站建设服务开发wordpress 缺省目录
  • 做网站一定需要虚拟主机吗咨询网站搭建
  • 自己怎样做免费网站静态网站站内搜索
  • 国泰君安建设工程官方网站孵化基地网站怎么建设
  • 网站管理后台 模板dede电影网站模板
  • 漳州优化网站建设保定百度推广电话
  • 知名网站定制报价医院网站页面设计
  • wordpress安全防护甘肃谷歌seo