Redis 消息队列 List、Streams
Redis 提供了多种数据类型,可以用于消息队列。其中,List 和 Streams 是常用的两种数据类型,用于实现消息队列。
- List
Redis 的 List 是一个双向链表,可以使用 LPUSH 和 RPUSH 命令在列表的头部和尾部添加元素。使用 LPOP 和 RPOP 命令从列表的头部和尾部删除元素。List 可以用来实现队列,但需要注意的是,当列表为空时,LPOP 和 RPOP 会返回 null。
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 生产者
r.lpush('myqueue', 'one')
r.lpush('myqueue', 'two')
# 消费者
value = r.brpop('myqueue', timeout=5)
print(value)
- Streams
Redis 的 Streams 是一个新的数据类型,它是一个持久化的有序字典结构,可以用来实现消息队列。使用 XADD 命令向 Stream 中添加消息,使用 XREAD 命令读取消息。Streams 支持消息的顺序和分组,并且可以保证消息的顺序性和不重复消费。
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 生产者
r.xadd('mystream', {'message': 'Hello, world!'})
# 消费者
messages = r.xread({'mystream': '0-0'}, block_pop_timeout=5000)
for msg in messages:
print(msg)
在以上的代码中,'mystream' 是 Stream 的名称,'0-0' 是消息的位置标记,表示从头开始读取。当没有消息可读时,xread 会等待直到超时。
以上就是 Redis 消息队列的两种实现方式,你可以根据实际需求选择合适的数据类型。
评论已关闭