Redis 延迟队列
在Redis中实现延迟任务队列,可以使用Sorted Set(有序集合)来存储待处理的任务,其中成员是任务的ID或者其他唯一标识,分数是任务预定执行的时间戳。
以下是一个使用Python和redis-py
库的示例代码,展示了如何将任务添加到延迟队列以及如何定期检查并处理任务:
import time
import redis
# 连接Redis
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
# 添加任务到延迟队列
def add_delay_task(task_id, delay_seconds):
score = time.time() + delay_seconds
redis_client.zadd('delay_queue', {task_id: score})
# 处理延迟任务
def process_delay_tasks():
while True:
# 取当前时间前的所有任务(已到期)
tasks = redis_client.zrangebyscore('delay_queue', 0, time.time())
for task_id in tasks:
# 处理任务
print(f"Processing task: {task_id}")
# 删除已处理的任务
redis_client.zrem('delay_queue', task_id)
time.sleep(5) # 每5秒检查一次
# 示例:添加两个任务,一个5秒后执行,一个10秒后执行
add_delay_task('task1', 5)
add_delay_task('task2', 10)
# 启动循环处理延迟任务
process_delay_tasks()
在这个示例中,我们定义了两个函数:add_delay_task
用于将任务添加到Redis的有序集合中,process_delay_tasks
是一个无限循环,定期检查并处理那些已经到期的任务。
请注意,这个示例仅用于演示目的,实际应用中可能需要考虑更多的因素,如任务的去重、异常处理、分布式锁等。
评论已关闭