编程 Redis Open Source 8.6:XADD 幂等、LRM 淘汰与 HOTKEYS

2026-10-08 21:04:07

Redis Open Source 8.6:XADD 幂等、LRM 淘汰与 HOTKEYS

Redis Open Source 8.6 于 2026-02-10 GA。以下按相对 8.4 的变化整理,文末附 8.6.2 的安全更新内容。

流:XADD 的幂等投递

XADD 新增 IDMP 与 IDMPAUTO 参数,提供至多一次(at-most-once)投递保证:同一条消息即使生产者因崩溃或网络故障重发,也只会加入流一次。IDMPAUTO 自动生成幂等标识,IDMP 由调用方手动指定。

默认的幂等生产行为由两个配置控制:

stream-idmp-duration
stream-idmp-maxsize

stream-idmp-duration 决定幂等标识保留多久,stream-idmp-maxsize 限制其占用上限。取舍点在于:这两个值本身就是内存与去重窗口之间的交换——窗口开得越大,重发被识别得越久,内存开销也越高。

淘汰策略:volatile-lrm 与 allkeys-lrm

新增两种淘汰策略 volatile-lrm 与 allkeys-lrm(least recently modified),按「最近未被修改」淘汰,而非「最近未使用」。配置入口仍是 maxmemory-policy:

maxmemory-policy allkeys-lrm

这适合读取多、修改少的负载:读操作不会刷新键的「新鲜度」,因此长期只读但仍有价值的键不会被误淘汰。反过来,如果业务上「访问即有价值」,LRU 类策略仍然更合适。

HOTKEYS:热点键检测

新增 HOTKEYS 命令,实时检测并上报频繁访问的键,用于定位集群中的性能瓶颈。这条线索是逐版本补齐的:8.2 引入 CLUSTER SLOT-STATS 检测热 slot,8.4 引入 Atomic Slot Migration 迁移它们,8.6 把观测粒度下沉到键。

安全:TLS 证书自动映射 ACL 用户

tls-auth-clients-user 支持基于证书 Common Name (CN),把 mTLS 客户端自动映射到某个 ACL 用户。客户端不再需要发送 AUTH,证书本身即凭据,省去 ACL 密码的分发与管理。前提是证书签发与 CN 命名本身受控,否则就把认证边界转移到了 CA 上。

时间序列:NaN 与新的聚合器

时间序列支持 NaN 值,用于标记未知或暂缺的数据,稍后回填。同时新增 COUNTNAN、COUNTALL 聚合器:前者统计 NaN 数量,后者统计全部样本,便于区分「没有数据」和「数据为零」。

内存与可观测性

  • hashtable-encoded 哈希与 skiplist-encoded 有序集合的内存占用显著下降;
  • 新增 keys memory size histograms,通过 key-memory-histograms 配置;
  • cluster-slot-stats-enabled 提供 per-slot 资源统计;
  • 该版本共包含 20 余项性能与资源利用率改进。

内存直方图和 per-slot 统计都带常驻开销,按需开启比默认全开更稳妥。

8.6.2(2026-03-24,安全更新)

修复项包括:

  • 副本全量同步时命令处理崩溃;
  • 新增内部命令 XIDMPRECORD 与 AOFRW,用于恢复流的 IDMP 状态;
  • XADD 使用 IDMP/IDMPAUTO 命中已有 IID 时,记录元数据变化;
  • 若干内存泄漏;
  • RDB 加载后 IDMP 定时过期失效;
  • 命令 arity 错误时 ACL 检查崩溃;
  • HSETEX/HGETEX 未校验 FIELDS 只能出现一次。

其中 IDMP 状态持久化相关的几项,直接关系到上面那套至多一次保证在重启、AOF 重写、RDB 加载之后是否仍然成立。

复制全文 生成海报 Redis Streams 淘汰策略 热点键 TLS

推荐文章

程序员茄子在线接单