Redis 8.8
提示
来自deepseek解释
原文链接:https://redis.io/docs/latest/develop/whats-new/8-8/
Redis 8.8 在 Redis 8.6 的基础上引入了新特性和性能改进。
本版本在多个领域提供了改进:
- 新的数组数据结构
- 哈希字段的子键通知(字段级通知)
INCREX:窗口计数器速率限制器,结合了INCR、INCRBY、INCRBYFLOAT、边界和过期XNACK:新的流命令,允许消费者显式释放待处理消息ZUNION、ZINTER、ZUNIONSTORE、ZINTERSTORE:新增COUNT聚合器JSON.SET:新增FPHA参数,用于指定同构 FP 数组的 FP 类型TS.RANGE、TS.REVRANGE、TS.MRANGE、TS.MREVRANGE:单个命令中支持多个聚合器FT.HYBRIDKNN子句:新增参数,用于请求每分片更少的候选数FT.PROFILEHYBRID:为FT.HYBRID增加性能分析支持- 新的组内排序归约器——
FT.AGGREGATE的COLLECT - Search and Query 性能大幅提升(Rust 迭代器、去虚拟化向量热路径、AArch64 原子操作)
- HyperLogLog、
MGET/MSET和HGETALL性能提升 - 大量安全修复和错误修复,涵盖核心、Search、JSON、Time Series 和 Probabilistic
以下是这些更新的详细说明。
支持的操作系统
Redis 8.8 在以下系统上进行了测试:
- Ubuntu 22.04 (Jammy Jellyfish), 24.04 (Noble Numbat), 26.04 (Resolute Raccoon)
- Rocky Linux 8.10, 9.7, 10.1
- AlmaLinux 8.10, 9.7, 10.1
- Debian 12.13 (Bookworm), Debian 13.4 (Trixie)
- Alpine 3.23
- macOS 14.8.4 (Sonoma), 15.7.4 (Sequoia), 26.3 (Tahoe) - 支持 Intel 和 ARM
安全修复
Redis 8.8 包含重要的安全修复(相比于 8.8-M03):
- (CVE-2026-23479) 解除阻塞客户端流中的 Use-After-Free 可能导致远程代码执行。
- (CVE-2026-25243)
RESTORE中的无效内存访问可能导致远程代码执行。 - (CVE-2026-23631) Lua Use-After-Free 可能导致远程代码执行。
- (CVE-2026-25588)
RESTORE中的无效内存访问可能导致远程代码执行(Time Series)。 - (CVE-2026-25589)
RESTORE中的无效内存访问可能导致远程代码执行(Probabilistic)。
新特性
数组数据结构
Redis 8.8 引入了新的数组数据结构 (#15162),为有序、可索引的集合提供了专用的数据类型。
哈希字段级通知
Redis 8.8 为哈希字段添加了子键通知,为哈希数据启用字段级的键空间通知。
INCREX 速率限制器
新的 INCREX 命令 (#15045) 是一个窗口计数器速率限制器,将 INCR、INCRBY、INCRBYFLOAT、边界和过期整合为单个原子操作。它通过消除多命令事务的需求,简化了常见的速率限制模式。
XNACK 流命令
新的 XNACK 命令允许流消费者显式释放待处理消息,为消费者组的待处理条目列表提供了更细粒度的控制。
有序集合 COUNT 聚合器
ZUNION、ZINTER、ZUNIONSTORE 和 ZINTERSTORE 支持新的 COUNT 聚合器,用于合并有序集合。
JSON.SET FPHA 参数
JSON.SET 接受新的 FPHA 参数,用于指定同构 FP 数组的浮点类型。
时间序列多聚合器
TS.RANGE、TS.REVRANGE、TS.MRANGE 和 TS.MREVRANGE 现在支持在单个命令中使用多个聚合器。
FT.HYBRID 每分片候选数
FT.HYBRID KNN 子句接受新参数,用于请求每分片更少的候选数,从而减少集群模式下的开销。
FT.PROFILE HYBRID
FT.PROFILE 为 FT.HYBRID 查询增加了性能分析支持。
组内排序归约器
FT.AGGREGATE 新增一个归约器,允许在 GROUPBY 后展开分组文档并在每个组内排序,支持更复杂的聚合管道。
错误修复
Redis 8.8 包含大量错误修复(相比于 8.8-M03)。
核心修复
SUBSCRIBE、PSUBSCRIBE、SSUBSCRIBE:OOM 时崩溃 (RED-167788)。CONFIG SET:某些设置允许无效字符 (RED-167787)。SCRIPT DEBUG:脚本可能崩溃 (RED-175507)。VADD:大的REDUCE值导致崩溃或缓冲区溢出 (RED-170921)。VSET:巨大分配时崩溃 (MOD-12678)。cluster-announce-ip拒绝主机名(回归)(#15188)。- 加载具有重复消费者 PEL 条目的流时双重释放 (#15095)。
- 处理损坏的 Streams RDB 数据的问题 (#15124)。
fast_float_strtod舍入不匹配 (#15111)。vecClear重置逻辑大小而未释放元素所有权 (#15190)。MULTI队列内存记账不正确 (#15163)。- 在
EXEC中CLIENT KILL取消订阅SSUBSCRIBE客户端时集群崩溃 (#15094)。 - Listpack 后向长度编码阈值差一 (#15151)。
- Lua 调试器中的复制不足 (#15115)。
- 通过
SENTINEL SET注入 Sentinel 配置 (#14970)。 - 客户端输出缓冲区内存跟踪未考虑规避复制的批量字符串引用 (#14934)。
INCREX语法更新 (#15237)。- 在非集群模式下可在运行时启用内存跟踪 (#15005)。
Search and Query 修复
FT.PROFILE HYBRID返回空响应 (MOD-14778)。FT.SPELLCHECK将PARAMS占位符视为字面量术语而不是解析它们 (MOD-10596)。- 当分析值缺失时
FT.PROFILE输出不一致 (MOD-10560)。 FT.CREATE现在在创建时拒绝包含无效选项组合的模式定义 (MOD-14655)。PERSIST和HPERSIST通知未反映在索引过期跟踪中 (MOD-14800)。FT.HYBRID中的竞争条件导致并发混合查询负载下间歇性失败 (MOD-14732)。- 拓扑验证失败时(例如某些节点不可达)
FT.SEARCH崩溃 (MOD-14475)。 - 在混合
FT.SEARCH和FT.AGGREGATE负载下协调器死锁 (MOD-14268)。 FT.DROPINDEX与正在进行的混合查询并发运行时内存泄漏 (MOD-14135)。FT.CURSOR READ超时和ON_TIMEOUT FAIL未在协调器和分片上强制执行 (MOD-14284, MOD-14998)。MAXIDLE后游标未清理,导致资源耗尽 (MOD-6430)。- 协调器
RETURN_STRICT在部分结果上返回错误数据,包括SORTBY管道 (MOD-13617)。 MAXPREFIXEXPANSION警告在集群模式下未传播给客户端 (MOD-13804)。- 当没有工作线程可用时搜索命令失败,而不是回退到主线程 (MOD-14921)。
- RDB 加载缺少对
FT.CREATE参数的验证,允许加载时索引状态损坏 (MOD-13118)。 Indexer_Process中的 Use-After-Move 导致索引期间崩溃 (MOD-14980)。- 后台查询与主线程写入器之间的死锁 (MOD-15364)。
FT.PROFILE使用错误的迭代器类型打印输出 (MOD-14678)。- 当
DEBUG_PARAMS_COUNT为零时返回令人困惑的错误 (MOD-15118)。 - 协调器代码路径中的栈溢出错误 (MOD-14649)。
JSON 修复
- 忽略尾随字符 (MOD-7266)。
- 带有递归路径的数组命令的错误变异顺序 (MOD-6722)。
- JSONPath 评估问题 (MOD-14664, MOD-7264, MOD-7272, MOD-7270, MOD-7268)。
Time Series 修复
- 断开连接和 TLS 故障时可能崩溃 (MOD-14850)。
count、countNaN、countAll归约器在所有值为 NaN 时返回 NaN (MOD-14420)。- 多分片命令期间的集群拓扑变更未处理 (MOD-14439)。
Probabilistic 修复
- RDB 加载时的内存泄漏 (MOD-15418)。
性能和资源利用率改进
Redis 8.8 提供了大量性能改进(相比于 8.6)。
核心改进
- HyperLogLog:4 个独立累加器,最后合并 (#15049)。
MGET和MSET的批量预取 (#15133)。- 对哈希表编码的 hash 进行
HGETALL的批量预取 (#14988)。 - 传递大小提示给 jemalloc 以加快释放 (#15071)。
- 通过添加编译时 jemalloc 调优,减少分配器和记账开销 (#15096)。
Search and Query 改进
- 向量索引热路径(HNSW 和暴力)去虚拟化,降低每次查询延迟 (MOD-14916)。
- 在 AArch64 上启用内联 LSE 原子操作,提高 ARM64 上的原子操作吞吐量 (MOD-14916, MOD-15419)。
- 当大量键同时过期时,减少过期处理开销 (MOD-14916)。
- 为 x86_64 发布版本启用 LTO(链接时优化)(MOD-14700)。
- 调整分片级超时到协调器调度时间,以实现更准确的记账 (MOD-13189)。
- 迭代器移植到 Rust,减少 FFI 开销。
- 不再为向量字段更新
numRecords,消除了摄取时不必要的写入开销 (MOD-15487)。 - VecSim SVS 线程池与工作池集成,以更好地利用线程 (MOD-9881)。
配置参数
Redis 8.8 引入了新的配置参数(相比于 8.8-M03):
- Slowlog 条目截断限制 (#15182):
slowlog-entry-max-argc:slowlog 条目中保留的命令参数最大数量。slowlog-entry-max-string-len:slowlog 条目中命令参数的最大长度。
- 默认最大工作线程数更新;
MAX_WORKER_THREADS现在是字符串配置 (MOD-14486, MOD-14763)。
指标
FT.PROFILE:增加了排队时间跟踪 (MOD-13602)。
CLI 工具
- 修复了
redis-cli中格式错误的旧版帮助条目导致的内存泄漏 (#15150)。