redis阻塞操作
来源:互联网 发布:网络机柜32 编辑:程序博客网 时间:2024/05/16 05:32
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两个链表和事件循环来处理阻塞事件的。
阅读全文
0 0
- redis阻塞操作
- redis实现阻塞轮训队列
- 原子操作、信号量、阻塞
- 设备的阻塞与非阻塞操作
- IO操作:同步,异步,阻塞,非阻塞
- redis【java操作redis】
- 【redis】redis操作GeoLiteCity
- redis操作
- 操作Redis
- redis操作
- redis操作
- redis操作
- Redis 操作
- Redis操作
- redis操作
- redis 操作
- Redis操作
- Redis操作
- 成为一名Java高级工程师你需要学什么
- Ubuntu 下 su:authentication failure 的解决办法
- 阿里云ECS服务器基于LAMP时安装配置composer+laravel填坑(四)
- HDU1238 Substrings(KMP+穷举)
- 第一章 并发编程的挑战
- redis阻塞操作
- 指针知识总结
- kNN简介
- 改
- Linux多线程----直接上代码----线程创建、终止(二)
- Git的介绍、安装和使用
- 【教程】-Idea 2017.1 安装离线版的sonarlint
- 7. Reverse Integer
- 博客书编辑收获