*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 回放恢复状态。