php redis brpoplpush,Redis BRPOPLPUSH 命令-Redis BRPOPLPUSH命令详解教程-Redis BRPOPLPUSH使用案例-嗨客网...

Redis BRPOPLPUSH命令教程

当列表 source 为空时,BRPOPLPUSH 命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行

超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示永久阻塞 。

Redis BRPOPLPUSH命令详解

语法

192.168.98.70:6379> BRPOPLPUSH source destination timeout

参数

参数

描述

source

要弹出最后一个元素的列表。

destination

要将弹出的元素插入的列表。

timeout

超时时间,秒为单位。

返回值

假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值,第二个元素是等待时长。

时间复杂度

O(1)

可用版本

>= 2.2.0

案例

source不存在,超时

source 不存在,设置超时时间

192.168.98.70:6379> LLEN haicoder

(integer) 0

192.168.98.70:6379> BRPOPLPUSH haicoder hicoder 10

(nil)

(10.84s)

我们首先,使用

最后,我们使用 BRPOPLPUSH 命令,移除并返回键为 haicoder 的列表尾的第一个元素同时插入列表 hicoder,因为列表 haicoder 为空,所以超时后返回。

source不存在,阻塞

source 不存在,设置超时时间为 0,永久阻塞

192.168.98.70:6379> LLEN haicoder

(integer) 0

192.168.98.70:6379> BRPOPLPUSH haicoder hicoder 0

我们首先,使用 LLEN 命令,获取键为 haicoder 的列表的长度,返回 0,即列表不存在。

最后,我们使用 BRPOPLPUSH 命令,移除并返回键为 haicoder 的列表尾的第一个元素同时插入列表 hicoder,因为列表 haicoder 为空,同时超时时间为 0 ,所以永久阻塞。

destination不存在

destination 不存在,执行成功

192.168.98.70:6379> RPUSH haicoder Redis

(integer) 1

192.168.98.70:6379> LLEN hicoder

(integer) 0

192.168.98.70:6379> BRPOPLPUSH haicoder hicoder 10

"Redis"

192.168.98.70:6379> LLEN haicoder

(integer) 0

192.168.98.70:6379> LRANGE hicoder 0 -1

1) "Redis"

192.168.98.70:6379> DEL hicoder

(integer) 1

我们首先,使用 RPUSH 命令向键为 haicoder 的列表中插入值 Redis。使用 LLEN 命令,获取键为 hicoder 的列表的长度,返回 0,即列表不存在。

接着,我们使用 BRPOPLPUSH 命令,移除并返回键为 haicoder 的列表尾的第一个元素同时插入列表 hicoder,此时源列表存在,但目的列表不存在,命令执行成功。

使用 LLEN 命令,获取键为 haicoder 的列表的长度,即源列表的长度,返回 0,列表不存在。

最后,我们使用

直到列表有可弹出元素

列表不存在时,设置超时时间为 0,等到有可弹出元素时返回

#一直阻塞

192.168.98.70:6379> LLEN haicoder

(integer) 0

192.168.98.70:6379> BRPOPLPUSH haicoder hicoder 0

#开启新的连接,向列表添加元素

192.168.98.70:6379> LPUSH haicoder Redis

(integer) 1

#上面的阻塞有返回

192.168.98.70:6379> BRPOPLPUSH haicoder hicoder 0

"Redis"

(22.79s)

#查看源列表

192.168.98.70:6379> LRANGE haicoder 0 -1

(empty list or set)

#查看目的列表

192.168.98.70:6379> LRANGE hicoder 0 -1

1) "Redis"

192.168.98.70:6379> DEL hicoder

(integer) 1

我们首先,使用 LLEN 命令,获取键为 haicoder 的列表的长度,返回 0,即列表不存在。

接着,我们使用 BRPOPLPUSH 命令,移除并返回键为 haicoder 的列表尾的第一个元素同时插入列表 hicoder,因为列表 haicoder 为空,同时超时时间为 0 ,所以永久阻塞。

此时,我们使用客户端,开启一个新的连接,向源列表里添加一个元素。添加完成后,上面阻塞的 BRPOPLPUSH 命令,立刻开始有返回。

最后,我们使用 LRANGE 查看源列表为空列表。使用 LRANGE 查看目的列表含有一个源列表原来添加的元素。

Redis BRPOPLPUSH命令总结

Redis 的 BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,当给定列表 source 不为空时,BRPOPLPUSH 的表现和 RPOPLPUSH 一样。Redis BRPOPLPUSH 命令语法:

192.168.98.70:6379> BRPOPLPUSH source destination timeout

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值