基于 Redis Zset 实现延迟队列:原理与优缺点总结
一、核心原理
基于 Redis 有序集合(Zset)实现延迟队列的本质是:利用 Zset 的 score 字段存储消息的“执行时间戳”,消费者通过轮询获取 score ≤ 当前时间的消息进行处理。
1.1 数据结构设计
| 元素 | 说明 |
|---|---|
| key | 延迟队列名称(如 delay_queue:order_timeout) |
| member | 消息内容(通常为 JSON 字符串,包含业务数据和元信息) |
| score | 消息的执行时间戳(毫秒级,如 System.currentTimeMillis() + delayMs) |
1.2 工作流程
1.3 关键命令
| 命令 | 作用 |
|---|---|
ZADD key score member | 添加延迟消息到队列 |
ZRANGEBYSCORE key 0 now LIMIT 0 batchSize | 获取到期的消息(score ≤ 当前时间) |
ZREM key member | 移除已获取的消息(防止重复消费) |
ZREMRANGEBYSCORE key 0 now | 批量移除到期消息 |
ZCARD key | 查看队列中待处理的消息数量 |