*Redis XREVRANGE 命令

返回 Stream 中指定 ID 范围内的消息,按 ID 从大到小排序。


*语法

XREVRANGE key end start [COUNT count]

*参数说明

参数 类型 必填 说明
key String Stream 键名
end String 结束 ID,+ 表示最大 ID
start String 起始 ID,- 表示最小 ID
COUNT Integer 最多返回数量

*返回值

条件 返回值
有消息 消息数组,格式同 XRANGE
无消息 空数组 []

*时间复杂度

O(log(N)+M),N 为 Stream 消息数,M 为返回数量。


*示例

> XADD mystream * temp 20
"1717000000000-0"
> XADD mystream * temp 21
"1717000000001-0"
> XADD mystream * temp 22
"1717000000002-0"

# 读取最近 2 条
> XREVRANGE mystream + - COUNT 2
1) 1) "1717000000002-0"
   2) 1) "temp"
      2) "22"
2) 1) "1717000000001-0"
   2) 1) "temp"
      2) "21"

*常见错误

错误 原因 解决
ERR wrong number of arguments 参数数量不足 检查 key、end、start 是否按顺序传入
WRONGTYPE Operation against a key holding the wrong kind of value 对非 Stream 类型执行 XREVRANGE 使用 TYPE 命令确认 key 类型为 stream
ERR value is not an integer COUNT 传入非整数 确保 COUNT 值为正整数
参数顺序错误导致返回空结果 先传 start 后传 end,与 XREVRANGE 的 end-start 顺序相反 确认参数顺序为 key end start [COUNT count]

*最佳实践

  1. 最新消息查询:XREVRANGE 获取 Stream 中最近的消息,如读取最近的日志。

  2. 最新消息实时监控:配合 XREVRANGE + COUNT 1 实现获取最新消息,类似队列的尾部消费。

  3. 日志倒序查看:倒序查看 Stream 日志,先展示最新事件。

  4. 参数顺序检查:调用前确认参数顺序是 end 在前 start 在后,避免范围颠倒返回空结果。

*5. 结合 XRANGE 双向遍历:正向用 XRANGE,反向用 XREVRANGE,实现完整的双向分页浏览。

*FAQ

Q1: XREVRANGE 和 XRANGE 有什么区别? A: XREVRANGE 按 ID 从大到小返回;XRANGE 从小到大。XREVRANGE 的 start 和 end 参数顺序也相反(先传 end 再传 start)。

Q2: 为什么 XREVRANGE 参数顺序是 end start? A: 与 XREVRANGE 的含义一致——从大到小遍历,所以先指定大端(end)再指定小端(start)。

Q3: XREVRANGE 可以用于实时监控吗? A: 可以,但 XREAD 更适合实时阻塞等待。XREVRANGE 更适合历史倒序查询。

Q4: XREVRANGE 的 COUNT 是从尾部开始数吗? A: 是。XREVRANGE 从大到小遍历,COUNT 限制返回数量,即返回最新的 N 条。

Q5: XREVRANGE 可以配合阻塞命令使用吗? A: 不可以。XREVRANGE 是非阻塞命令,需要阻塞等待请使用 XREAD BLOCK。