Redis 核心篇:唯快不破的秘密
在Redis中,有一种特殊的数据类型叫做"Stream",它是Redis 5.0引入的新特性。Stream类型提供了一种可以持久化的、可以批量消费的、多播的、有序的消息队列。
在这里,我们可以使用Stream来实现一个简单的分布式任务队列。
解决方案:
- 生产者将任务推入Stream
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
# 生成一个stream的ID
stream_id = r.xadd('my-stream', {'action': 'process', 'data': 'some data'})
print(f'Stream ID: {stream_id}')
- 消费者从Stream中消费任务
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
# 从stream的起始位置开始读取
stream_id = '0-0'
while True:
# 批量读取消息,每次最多读取两条
messages = r.xrange('my-stream', stream_id, count=2)
for message in messages:
# 处理消息
print(f'Processing message: {message}')
# 更新stream_id
stream_id = message[0]
if len(messages) == 0:
# 如果没有消息,休眠一会儿
print('No messages, sleeping...')
sleep(5)
在这个例子中,我们使用了Redis的xadd命令来生产消息,使用xrange命令来消费消息。这个模型的好处是,消费者可以按照自己的速度来处理消息,而不会因为处理速度慢而影响生产者的速度。
注意:这只是一个非常基础的例子,实际应用中你可能需要考虑如消息确认、异常处理、持久化等问题。
评论已关闭