Redis--blpop命令使用

在Redis的数据结构中,list这个类型的数据结构,我们说底层是采用的双向链表结构,可以从左边出队入队,也可以从右边出队入队,那其实list也提供了阻塞出队的命令,类似于jdk中的阻塞队列

blpop

127.0.0.1:6379> lpush test-list a b c d
(integer) 5

127.0.0.1:6379> lrange test-list 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "a"

此时开启一个新的客户端连接,执行

127.0.0.1:6379> blpop test-list 5
1) "test-list"
2) "d"
127.0.0.1:6379> blpop test-list 5
1) "test-list"
2) "c"
127.0.0.1:6379> blpop test-list 5
1) "test-list"
2) "b"
127.0.0.1:6379> blpop test-list 5
1) "test-list"
2) "a"
127.0.0.1:6379> blpop test-list 5
1) "test-list"
2) "a"
127.0.0.1:6379> blpop test-list 5
(nil)
(5.04s)

可以看到,在该命令中,需要指定一个超时时间的概念,这个超时时间的意思就是,如果在5S之内,没有从list中获取到出队的元素,就会返回nil,如果指定为0,就表示一直阻塞
所以,如果当前list为空,执行了blpop命令,就会一直阻塞,直到list中有元素入队

127.0.0.1:6379> blpop test-list 30
1) "test-list"
2) "cc"
(3.16s)

执行了这个命令之后,不会立即打印cc,因为此时test-list为空,我在另外一个客户端执行

127.0.0.1:6379> lpush test-list cc
(integer) 1

第一个客户端,会立即打印cc,并且展示阻塞的时间是3.16S

同理,brpop就是默认从右边出队,并且是阻塞的

这个类似于jdk提供的阻塞队列,只是使用redis去实现的话,是分布式的,具体的应用场景,还没有想到,看到了这个命令,所以记录一下如何使用

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值