*Redis XCFGSET 命令

XCFGSET 用于为 Stream 配置 IDMP(Idempotent Message Processing,幂等消息处理)参数,控制幂等 ID 的保留时长和容量上限。


*语法

XCFGSET key [IDMP-DURATION idmp-duration] [IDMP-MAXSIZE idmp-maxsize]

*参数说明

参数 类型 必填 说明
key String Stream 键名(必须已存在)
IDMP-DURATION Integer 幂等 ID 保留时长(秒),范围 1~86400,默认 100
IDMP-MAXSIZE Integer 每个生产者保留的最大幂等 ID 数,范围 1~10000,默认 100

*返回值

  • OK:配置成功
  • Error:参数非法、key 不存在、类型错误等

*时间复杂度

O(1)

*

*示例

*设置保留时长

> XADD mystream * field value
"1638125000000-0"
> XCFGSET mystream IDMP-DURATION 300
OK

*设置最大容量

> XCFGSET mystream IDMP-MAXSIZE 1000
OK

*同时设置两项

> XCFGSET mystream IDMP-DURATION 600 IDMP-MAXSIZE 500
OK

*常见错误

错误 原因 解决
ERR no such key Stream 不存在 先使用 XADD 创建 Stream
WRONGTYPE key 不是 Stream 类型 确认 key 的数据类型
ERR invalid duration 时长超出 1~86400 调整参数到合法范围
ERR invalid maxsize 容量超出 1~10000 调整参数到合法范围
ERR syntax error 语法错误或缺少参数 检查命令格式

*最佳实践

  • 在启用 IDMP 的 Stream 上,先调用 XCFGSET 再发送消息
  • 根据业务幂等窗口合理设置 IDMP-DURATION,建议大于消费端的最大重试间隔
  • IDMP-MAXSIZE 按生产者数量预估,避免频繁淘汰导致幂等失效
  • 调用 XCFGSET 会清空该 Stream 已有的 IDMP 映射,生产环境谨慎使用
  • 配合 XADD 的 IDMP 选项(XADD key IDMP pid iid ...)实现端到端幂等

*FAQ

Q1: IDMP 是什么? A: IDMP(Idempotent Message Processing)是 Redis Stream 的幂等消息处理机制。生产者为每条消息附加唯一的幂等 ID(pid + iid),Redis 自动去重,防止消息重复处理。

Q2: 为什么 XCFGSET 会清空已有 IDMP 映射? A: 这是一个重置操作,用于重新初始化 IDMP 配置。生产环境应在低峰期执行,避免影响去重效果。

Q3: 不使用 XCFGSET 能用 IDMP 吗? A: 可以,未配置时使用默认值(DURATION=100s,MAXSIZE=100)。但建议根据业务需求显式配置。