您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
Redis Blpop 命令
发布时间:2021-10-31 18:22:58编辑:雪饮阅读()
Redis Blpop 命令移出并获取列表的第一个元素
返回值:
返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值
下面以blpop移除列表的第一个元素并以100秒为超时配置的实例:
127.0.0.1:6379> lrange list001 0 10
1) "element4"
2) "element3"
3) "element2"
4) "element1"
127.0.0.1:6379> blpop list001 100
1) "list001"
2) "element4"
127.0.0.1:6379> lrange list001 0 10
1) "element3"
2) "element2"
3) "element1"
如果列表为空,返回一个 nil 。
如果列表没有元素会阻塞列表直到等待超时
127.0.0.1:6379> blpop list001 100
1) "list001"
2) "element3"
127.0.0.1:6379> blpop list001 100
1) "list001"
2) "element2"
127.0.0.1:6379> blpop list001 100
1) "list001"
2) "element1"
127.0.0.1:6379> blpop list001 100
(nil)
(100.03s)
或者列表为空时候,在等待超过过程中突然有了元素也能正常返回:
首先会话1先去lpop消费:
127.0.0.1:6379> blpop list001 100
然后这样一直在等待,然后迅速另外开一个会话给这个list进行push一个元素让list不为空
127.0.0.1:6379> lpush list001 element1
(integer) 1
然后会发现第一个会话就有东西获取到了
127.0.0.1:6379> blpop list001 100
1) "list001"
2) "element1"
(22.44s)
blpop操作是阻塞的,那么意味着可以做消费锁,比如锁库存。不会出现超卖现象。
我的理解是比如一个商品id为5,库存为100.
那么我可以建立list的key为goods_id_5 然后元素为1,2,3,4,…100这样,然后比如秒杀时候就可以通过blpop来消费这个goods_id_5这个key,这里假如秒杀商品就正好是这个id为5的商品。
关键字词:Redis,Blpop
上一篇:Redis 列表(List)
下一篇:Redis Brpop 命令