使用 Python 配合 Redis 超越缓存
使用 Redis 构建队列
Redis 提供了字符串、使用哈希、配合集合和列表等多种数据结构可供使用。超存 这些数据结构都是越缓储存数据的好帮手, 其中列表就可以用作一个非常棒的使用队列(queue)。
为了将列表用作队列,配合 我们需要使用 RPUSH 将新项目推送至列表末尾,超存 然后使用 LPOP 或者 BLPOP 将它们从列表的越缓前面弹出。 由于 Redis 对数据库的使用所有修改都是在单个线程里面完成的, 所以这些操作都是配合原子的。

作为例子,源码库超存 下面这段在队列里面添加了一些大脚怪的越缓踪迹。
复制import asyncio import aioredis async def main(): redis = await aioredis.create_redis(redis://:foobared@localhost:6379/0,使用 encoding=utf-8) await asyncio.gather( add_to_queue(redis, Possible vocalizations east of Makanda), add_to_queue(redis, Sighting near the Columbia River), add_to_queue(redis, Chased by a tall hairy creature) ) redis.close() await redis.wait_closed() def add_to_queue(redis, message): return redis.rpush(bigfoot:sightings:received, message) asyncio.run(main()) 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.import asyncio 这个程序非常直接。 我们只需要在第 18 行调用 redis.rpush ,配合 就能够将指定的超存元素推入到队列。 接下来是从队列另一端读取元素的代码, 同样非常简单。
复制 import aioredis from pprint import pp async def main(): redis = await aioredis.create_redis(redis://:foobared@localhost:6379/0, encoding=utf-8) while True: sighting = await redis.blpop(bigfoot:sightings:received) pp(sighting) asyncio.run(main()) 1.2.3.4.5.6.7.8.9.10.11.12.13.Redis 还有 一些同样很酷的命令 , 它们不仅可以将列表用作队列甚至堆栈。 我最喜欢的是 BRPOPLPUSH , 它可以从列表的右侧阻塞并弹出一些元素, 然后将被弹出的云南idc服务商元素推入到另一个列表。 你可以使用这个命令来将一个队列中的元素传递至另一个队列, 这是非常棒的一个命令。第 11 行和第 12 行的无限循环将等待并且打印被推入至队列中的大脚怪踪迹。 这里使用了 redis.blpop 而不是 redis.lpop , 因为前者可以阻塞客户端并等待列表中的元素返回。 比起让 Redis 和 Python 代码之间的网络无休止地轮询并做无用功, 让客户端阻塞并等待元素出现的做法会高效得多。