代码 Redis 8.4 升级笔记:原子槽迁移、字符串原子操作与 FT.HYBRID

2026-09-10 21:03:49

Redis 8.4 升级笔记:原子槽迁移、字符串原子操作与 FT.HYBRID

官方文档:
Release notes:
Cloud breaking changes:

Redis 8.4 在 8.2 基础上主要补了三块:集群运维、字符串原子操作、流与查询引擎。下面是相对 8.2 的主要变化。

集群:原子槽迁移与槽级指标

  • CLUSTER MIGRATION 做原子槽迁移,把槽和其关联数据放在一次原子操作里搬完,消除过去迁移过程中那段短暂不可用窗口。
  • CLUSTER SLOT-STATS 给出每槽用量指标:key 数、CPU 时间、网络 I/O。

这两条配合用,槽分布倾斜和热点槽能直接从指标看出来,迁移也不再需要业务侧容忍一个不可用间隙。

字符串:DELEX / DIGEST / SET 扩展 / MSETEX

  • DELEX:值匹配指定条件时才删 key。
  • DIGEST:生成 key 值的加密摘要,用于完整性校验。
  • SET 新增扩展,支持原子 compare-and-set 和 compare-and-delete,可用来做无锁数据结构和乐观并发控制。
  • MSETEX:一次原子地设置多个 key 并更新它们的过期时间。

这几个命令把「先读再判断再写」的竞态收进了单条原子操作,原来靠 Lua 脚本或 WATCH/MULTI 实现的逻辑可以简化。

流:XREADGROUP CLAIM

XREADGROUP 新增 CLAIM min-idle-time 选项:一次操作里既能认领并处理闲置的 pending 条目,也能消费新到达的条目,不必再分两轮读。

查询引擎:FT.HYBRID

FT.HYBRID 支持混合查询,用 Reciprocal Rank Fusion(RRF)和线性组合融合多种排序算法的打分。

新增配置:

  • search-default-scorer:默认文本与 tag 打分器,新默认值是 BM25STD
  • search-on-oom:查询时遇到 OOM 的行为,三档——IGNORE(OOM 也照常查)、FAIL(启动时任一节点处于 OOM 就失败)、RETURN(仅部分集群节点 OOM 时返回部分结果,默认值)。
  • search-io-threads:集群管理器协调器使用的通信线程数,默认 20。

性能改动

  • I/O threading:吞吐提升明显,缓存类场景(10% SET、90% GET)在 4 核下提升超过 30%。
  • LOOKAHEAD 预取(#14440):通过 lookahead 管道提前解析多条命令,运行时可配,默认 16。
  • BITCOUNT:AVX2、AVX512 popcount 实现,另有 Arm Neon SIMD 向量化。
  • HyperLogLog:无分支比较优化 + Arm Neon SIMD 向量化。
  • Vector set 的 VADD/VSIM:AVX2、AVX512 点积实现。
  • JSON:同构数组与短字符串内联,内存占用最多降低 91%。

AOF 启动修复

新增 aof-load-corrupt-tail-max-size:启动时允许 Redis 自动修复尾部轻微损坏的 AOF。

配置参数汇总

aof-load-corrupt-tail-max-sizedecode_array_with_array_mt(Lua 中控制空 JSON 数组的处理方式)、lookahead(运行时 lookahead 深度,默认 16)、search-default-scorersearch-on-oomsearch-io-threads

已知限制

  • 原子槽迁移期间,搜索命令(FT.SEARCHFT.AGGREGATEFT.CURSORFT.HYBRID)和时序命令(TS.MGETTS.MRANGETS.MREVRANGETS.QUERYINDEX)可能返回部分结果或重复。
  • FT.PROFILEFT.EXPLAINFT.EXPLAINCLI 不包含 FT.HYBRID 选项。
  • FT.HYBRID 指标不在 FT.INFOINFO 中显示。
  • 部分 FT.HYBRID 选项尚未上线:EXPLAINSCORESHARD_K_RATIOYIELD_DISTANCE_ASWITHCURSOR
  • COMBINE 步骤之后用 FILTER 做后置过滤,当前不支持。

升级判断

集群在线扩缩容频繁、对迁移窗口敏感的部署,8.4 的原子槽迁移是主要收益点;但迁移期间搜索与时序命令可能返回部分结果或重复,一致性要求高的读路径要避开迁移窗口,或用 CLUSTER SLOT-STATS 先确认没有正在进行的迁移。

依赖默认文本打分的业务要注意 search-default-scorer 换成 BM25STD 后排序结果会变,需要旧行为就显式指定打分器。search-on-oom 默认 RETURN,即部分节点 OOM 时返回部分结果;要强一致失败语义就改 FAIL。I/O threading 的收益与核数和负载相关,上线前按自己的 SET/GET 比例压测确认。

打算用 FT.HYBRID 的,先把上面的限制过一遍:缺的选项和后置过滤会影响查询写法,FT.PROFILE/FT.EXPLAIN 暂时看不到它的执行细节,指标也要另找地方观测。AOF 的 aof-load-corrupt-tail-max-size 只处理尾部轻微损坏,不能替代备份与校验。

复制全文 生成海报 Redis 数据库 缓存 升级

推荐文章

程序员茄子在线接单