用redis做延时任务怎么做的
时间: 2023-10-22 17:10:23 浏览: 41
使用 Redis 实现延时任务可以通过 Redis 的有序集合(Sorted Set)和发布/订阅(Pub/Sub)机制来实现。
具体步骤如下:
1. 将任务信息以及需要执行的时间作为一个元素添加到有序集合中,时间作为分值。
2. 启动一个消费者进程,用于监听有序集合中的任务。
3. 当有序集合中的任务到达执行时间时,消费者进程会接收到通知,并从有序集合中删除该任务。
4. 消费者进程根据任务信息执行相应的操作。
以下是代码示例:
```python
import time
import redis
# 连接 Redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
# 将任务加入有序集合
def add_task(task, delay):
r.zadd('tasks', {task: time.time() + delay})
# 监听有序集合中任务的到期事件
def consume_tasks():
while True:
tasks = r.zrangebyscore('tasks', 0, time.time(), start=0, num=1)
if len(tasks) > 0:
task = tasks[0]
r.zrem('tasks', task)
# 执行任务
print('Task:', task)
# 添加任务
add_task('task1', 5)
add_task('task2', 10)
# 启动消费者进程
consume_tasks()
```
在以上示例中,`add_task()` 函数将任务信息以及需要执行的时间添加到 Redis 的有序集合中,`consume_tasks()` 函数则不断监听有序集合中的任务,并在任务到期时执行相应的操作。