redis延迟队列demo
时间: 2023-07-11 10:44:00 浏览: 114
好的,下面是一个简单的 Redis 延迟队列的 demo,基于 Redis 的 sorted set 实现:
```python
import redis
import time
redis_host = 'localhost'
redis_port = 6379
redis_password = None
def enqueue(delay, data):
r = redis.StrictRedis(host=redis_host, port=redis_port, password=redis_password)
timestamp = time.time() + delay
r.zadd('queue', {data: timestamp})
def dequeue():
r = redis.StrictRedis(host=redis_host, port=redis_port, password=redis_password)
while True:
items = r.zrangebyscore('queue', 0, time.time(), start=0, num=1)
if not items:
time.sleep(1)
continue
item = items[0]
if r.zrem('queue', item):
return item
```
这个 demo 中,enqueue 函数用于将数据加入延迟队列,并设置延迟时间 delay;dequeue 函数则用于从队列中取出延迟时间已到的数据。
在 Redis 中,sorted set 用于存储数据,并按照 score 进行排序。这里我们将数据作为 sorted set 的 member,将延迟时间戳作为 sorted set 的 score。enqueue 函数使用 zadd 命令将数据插入 sorted set 中;dequeue 函数则使用 zrangebyscore 命令查询所有延迟时间已到的数据,并使用 zrem 命令将其从 sorted set 中移除。
注意:这个 demo 中没有考虑多进程/线程情况下的并发访问问题,如果需要在多进程/线程环境下使用,需要使用 Redis 的分布式锁等机制来保证数据的一致性。
阅读全文