永发信息网

redis怎么解决阻塞

答案:1  悬赏:40  手机版
解决时间 2021-11-27 16:40
redis怎么解决阻塞
最佳答案
redis中blpop可以实现链表的阻塞操作,客户端连接在list没有数据的情况下会进行阻塞。这让我产生了一个疑问,redis本身是一个单线程服务,如果阻塞客户端一直保持着跟服务器的链接,会不会阻塞其他命令的执行呢?
答案显然是不会,这就涉及到redis阻塞命令的实现原理。我们知道,在redis server中有两个循环:IO循环和定时事件。在IO循环中,redis完成客户端连接应答、命令请求处理和命令处理结果回复等,在定时循环中,redis完成过期key的检测等。redis一次连接处理的过程包含几个重要的步骤:IO多路复用检测套接字状态,套接字事件分派和请求事件处理。
redis在blpop命令处理过程时,首先会去查找key对应的list,如果存在,则pop出数据响应给客户端。否则将对应的key push到blocking_keys数据结构当中,对应的value是被阻塞的client。当下次push命令发出时,服务器检查blocking_keys当中是否存在对应的key,如果存在,则将key添加到ready_keys链表当中,同时将value插入链表当中并响应客户端。
服务端在每次的事件循环当中处理完客户端请求之后,会遍历ready_keys链表,并从blocking_keys链表当中找到对应的client,进行响应,整个过程并不会阻塞事件循环的执行。所以, 总的来说,redis server是通过ready_keys和blocking_keys两个链表和事件循环来处理阻塞事件的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
关于羊汤的成语
把336个苹果装进六个篮子里平均每篮装几个苹
女:辛酉年丁酉月戊午日乙卯时出生的,帮我看
为什么老爸从监狱里出来,还是一点没变??这
2冠8001整件价格多少
方城加油站-洗车房在什么地方啊,我要过去处
手机百度的网友说孙悟空成为战斗胜佛,观音嫁
南京火车站到江宁区怎么走
vivo7pls到手卖多少钱?
精液有时温有时冰,正常吗
科尔沁博王府是哪个王爷住的
农历八月十二九点八分出生叫什么好听
李春梅的个人简介
最近在头上发现了一个1cm左右的圆圈没有头发
合肥每个月会从考试都在周末吗
推荐资讯
邵东领结婚证在哪里
上海豫园这里这些又高又直的树是什么树啊
秀丽美容美发经典地址在哪,我要去那里办事,
四维是什么概念?
夸夸其谈无措施谈也白谈求下联
what does an artist?怎么回答。
尔能组什么四字词语,尔在第一位
410000000乘100等于多少
有谁了解一般婚床怎么选要好
少妇竟主动湿身教小鲜肉弹钢琴那韩国电影叫什
为什么我对狗比对人还好
vivoe19v怎么换开关机画面
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?