*Redis XIDMPRECORD 命令
XIDMPRECORD 是 Redis 内部命令,用于在 AOF 重写和加载时恢复 IDMP(幂等消息处理)元数据,用户不应直接调用。
*语法
XIDMPRECORD key pid iid stream-id
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Stream 键名 |
| pid | String | 是 | 生产者 ID |
| iid | String | 是 | 幂等 ID |
| stream-id | String | 是 | Stream 条目 ID |
*返回值
- OK:提供的 pid/iid 对已映射到相同的 stream-id(幂等)
- Error:key 不存在、不是 Stream、stream-id 不存在或已删除、pid/iid 为空、pid/iid 已映射到不同的 stream-id
*时间复杂度
O(1)
*
*示例
注意:此命令为内部命令,以下示例仅供理解其语义。
*AOF 恢复场景(内部使用)
> XADD mystream * field value
"1638125000000-0"
> XCFGSET mystream IDMP-DURATION 300
OK
# 内部命令,模拟 AOF 回放
> XIDMPRECORD mystream producer1 msg-id-1 1638125000000-0
OK
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR no such key | key 不存在 | 确认 key 存在 |
| WRONGTYPE | key 不是 Stream | 确认 key 的数据类型 |
| ERR pid/iid are empty | pid 或 iid 为空字符串 | 传入非空值 |
| ERR entry does not exist | stream-id 不存在或已被删除 | 确认 stream-id 有效性 |
| ERR pid/iid pair maps to different ID | pid/iid 已映射到其他 stream-id | 检查参数一致性 |
*最佳实践
- 不要直接调用此命令。IDMP 元数据由 XADD 自动维护,AOF 回放由 Redis 内部处理
- 如需手动管理幂等性,使用
XADD key IDMP pid iid ...语法 - 调试时可通过
XINFO STREAM mystream查看 IDMP 统计信息
*FAQ
Q1: 为什么不应该直接调用 XIDMPRECORD? A: 它是 Redis 内部用于 AOF 持久化的命令,直接调用可能导致 IDMP 映射与实际 Stream 数据不一致,破坏幂等性保证。
Q2: 如果确实需要手动设置 IDMP 映射怎么办?
A: 使用 XADD key IDMP pid iid * field value 在添加消息时同时注册幂等 ID。
Q3: XIDMPRECORD 和 XADD IDMP 有什么区别? A: XADD IDMP 是用户接口,在添加消息时自动处理幂等性;XIDMPRECORD 是纯内部命令,仅用于 AOF 回放恢复状态。