一日一技:在Redis中,如何使用blpop?

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 一日一技:在Redis中,如何使用blpop?

在Python操作Redis时,如果我们要从一个Redis列表的左侧弹出一个数据,代码一般这样写:

import redis
client = redis.Redis()
data = client.lpop('key')

如果要持续不断地监控这个列表,那么代码可能写为:

import time
import redis
client = redis.Redis()
while True:
    data_bytes = client.lpop('key')
    if not data_bytes:
        time.sleep(1)
        continue
    data = data_bytes.decode()
    print('使用data')

这样写代码,功能确实能够实现,但问题是,这种轮询的方法,在列表经常为空的情况下会浪费大量网络请求。

为了节约网络请求,可以使用Redis列表的阻塞式列表弹出命令: blpopbrpop

这两个命令与常规的 lpoprpop有两点不同:

  1. 当代码运行到 blpop时,如果列表为空,那么程序就会卡在这里,直到列表中有数据为止。
  2. blpop返回的数据和 lpop返回的数据有些许不同。

blpop的使用方法如下:

>>> import redis
>>> client = redis.Redis()
>>> data_tuple = client.blpop('test_blpop')
>>> print(data_tuple)
(b'test_blpop', b'3')

data_tuple是一个元组,元组的第0项是bytes型的Key,元组的第1项才是列表里面被弹出来的值,这个值也是bytes型的,因此要使用的话也需要解码为字符串型。

所以上面的轮询代码可以修改为:

import redis
client = redis.Redis()
while True:
    data_tuple = client.blpop('key')
    data = data_tuple[1].decode()
    print('使用data')

这里不需要判断 data_tuple是否为None,因为必定不为None。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
8月前
|
存储 消息中间件 NoSQL
Redis入门操作 1
Redis入门操作
56 0
|
9月前
|
存储 缓存 NoSQL
Redis简介
Redis简介
64 0
|
4天前
|
自然语言处理 NoSQL 安全
Redis基础篇:Redis简介和安装
Redis基础篇:Redis简介和安装
|
6月前
|
存储 缓存 NoSQL
Redis 简介
不可打断的执行,因为原子性,所以可以让使用者的意志从一而终的贯穿全局。 长久社区维护下的多样化风格
38 0
|
7月前
|
存储 缓存 NoSQL
04Redis - Redis概述
04Redis - Redis概述
22 0
|
8月前
|
SQL NoSQL 关系型数据库
2.1 Redis简介
2.1 Redis简介
216 0
|
8月前
|
存储 数据采集 NoSQL
Redis入门操作 2
Redis入门操作
42 0
|
10月前
|
存储 SQL NoSQL
Redis简介(1)
Redis简介(1)
57 0
|
12月前
|
存储 消息中间件 缓存
Redis-01Redis概述
Redis-01Redis概述
61 0
|
NoSQL 安全 Unix
Redis详解之 redis的简介与安装
Redis:REmote DIctionary Server(远程字典服务)。 是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。是完全开源免费的,用C语言编写的,遵守BSD协议,高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库。
120 0