Redis 8.8 发布:新增数组数据结构与速率限制器
速览
Redis 8.8 版本正式发布,带来了多项重要更新。新版本新增了数组(Array)数据结构,支持更灵活的数据存储与操作。同时引入了速率限制器(Rate Limiter),有助于更好地控制请求频率。此外,该版本还包含多项性能改进,提升了整体运行效率。
AI 深度解读
Redis 8.8 深度解读:引入 Array 数据结构与性能飞跃
背景
Redis 作为高性能键值存储数据库,其核心竞争力之一在于提供了多种适合不同场景的数据结构。然而,随着应用场景的日益复杂,开发者往往需要在多种数据结构之间进行权衡,或者通过复杂的客户端逻辑(如 Lua 脚本)来模拟特定功能。
Redis 8.8 版本的发布标志着其在数据抽象能力和性能优化上的重大进展。该版本不仅引入了全新的通用数据结构 Array(数组),还针对速率限制、流处理、时间序列分析等高频场景进行了原生支持。此外,该版本在持久化、复制以及 JSON 模块的存储效率上带来了显著的性能提升,旨在降低 AI 工作负载和实时分析场景下的资源消耗与延迟。
核心内容
Redis 8.8 在开源版本中正式可用,其核心更新主要集中在性能优化和一系列新功能特性上。
性能改进
Redis 8.8 带来了显著的端到端吞吐量提升。特别是在数据持久化和复制(全量同步)方面,性能提升了高达 60%。这一改进对于需要高可用性和数据强一致性的生产环境至关重要,能够显著缩短故障恢复时间和同步延迟。
新功能详解
1. 全新通用数据结构:Array(数组)
这是 Redis 8.8 最引人注目的特性。Redis 创始人 antirez 指出,Redis 的传统哲学是“为任务选择正确的数据结构”。虽然已有 List、Hash、Set 和 Sorted Set,但 Array 填补了索引寻址集合的空白。
- 定义:Array 是一个由字符串值组成的、可通过数字索引寻址的集合。每个元素存储在数字索引中,访问速度极快。
- 动态与稀疏友好:Array 不需要固定大小,可以动态增长和收缩。索引范围从 0 到 $2^{64}-1$,支持稀疏存储(即使用的索引不必连续),内存占用与元素数量成正比,同时保持极快的索引访问速度。
- 计算感知(Compute-aware):Array 支持服务端聚合计算。
- 对于数值型数据,支持
SUM、MIN、MAX聚合。 - 对于二进制标志位,支持
AND、OR、XOR布尔聚合。
- 对于数值型数据,支持
- 环形缓冲区(Sliding Window):Array 可以用作有界的滚动缓冲区,保留最后 N 个元素,维持插入顺序,并自动覆盖旧条目。通过原子命令
ARRING实现,比传统的RPUSH+LTRIM组合吞吐量高一倍。 - 搜索能力:可以将 Array 视为文本文件,每行由行号索引。支持通过精确字符串、部分匹配、Glob 风格模式或正则表达式搜索特定行。
- 性能对比:
- 随机访问:在大规模元素随机访问场景下,Array 的吞吐量比 Hash 高 8-15%,比 List 快至少 5 倍。
- 内存占用:List 最紧凑。Array 每个元素比 List 多占用约 18% 内存;Hash 比 List 多占用 30-46% 内存(取决于元素大小)。
2. 窗口计数器速率限制器(Window Counter Rate Limiter)
速率限制是 Redis 最常见的用例之一。以往用户通常结合客户端逻辑和服务端 Lua 脚本来实现。Redis 8.8 引入了原生的窗口计数器速率限制器,简化了实现并提高了效率。
3. Redis Streams 消息 NACKing 支持
继 8.2(简化多消费者组的消息确认与删除)、8.4(简化新消息与空闲待处理消息读取)和 8.6(幂等生产)之后,8.8 进一步增强了 Streams 功能。
- NACKing:允许消费者显式释放待处理消息(Pending Messages),使其立即变为可用状态,并优先被其他消费者处理。这对于处理失败任务或需要重试的场景非常有用。
4. Hash 字段级通知(Subkey Notifications)
在 Redis 7.4 引入 Hash 字段过期功能后,社区强烈要求提供字段级别的通知。Redis 8.8 实现了这一功能,允许客户端订阅 Hash 字段的事件(如字段过期、删除)。通知内容包括 Key、Subkey(字段名)和事件类型。
5. 时间序列多聚合器支持
获取多个时间序列聚合器(如蜡烛图所需的 MIN、MAX、FIRST、LAST)是常见操作。此前需要多次命令调用。Redis 8.8 允许在单个时间序列命令中指定多个聚合器,减少了网络往返次数(Round Trips),简化了客户端逻辑。
6. JSON 数值数组存储控制
Redis 8.4 引入了同质数值数组支持,最高可减少 92% 的内存占用,对 AI 工作负载极具价值。Redis 8.8 允许用户显式控制数值数组的存储格式,支持 BF16、FP16、FP32 或 FP64。这使得用户可以根据源数据、向量索引需求以及内存/精度的权衡进行更精细的管理。
7. Sorted Set 聚合器扩展
Redis 8 扩展了 Sorted Set 的并集(Union)和交集(Intersection)操作,引入了新的 COUNT 聚合器。这使得每个元素的分数可以反映其出现在输入集合中的次数,或者跨集合的加权总和,从而解锁了排名、评分和分析方面的新用例。
关键要点
- Array 数据结构:Redis 8.8 引入了全新的
Array数据结构,它是动态的、稀疏友好的、支持服务端聚合(SUM/MIN/MAX/AND/OR/XOR)且支持搜索的索引寻址容器。 - 性能优势:
- 随机访问吞吐量:Array 优于 Hash(8-15%)和 List(5倍以上)。
- 环形缓冲区:
ARRING命令比RPUSH+LTRIM吞吐量高 2 倍。 - 内存效率:Array 比 List 多占用约 18% 内存,但远优于 Hash。
- 原生速率限制:内置窗口计数器速率限制器,无需依赖复杂的 Lua 脚本。
- Streams 增强:支持消息 NACKing,允许消费者显式释放待处理消息以供其他消费者优先处理。
- 细粒度通知:Hash 字段支持订阅过期和删除等事件通知。
- 时间序列优化:单次命令支持多个聚合器,减少网络往返。
- JSON 精度控制:支持显式指定 JSON 数值数组的存储精度(BF16/FP16/FP32/FP64),平衡内存与精度。
- Sorted Set 新聚合:Union/Intersection 操作新增
COUNT聚合器,用于统计元素出现次数或加权求和。 - 整体性能提升:持久化和全量复制速度提升高达 60%。
意义与影响
Redis 8.8 的发布不仅仅是功能堆叠,更是 Redis 向“通用计算引擎”演进的又一重要步骤。
- 简化架构设计:通过引入
Array和原生的速率限制器、Streams NACKing 等功能,开发者不再需要依赖复杂的客户端逻辑或 Lua 脚本来实现常见模式。这降低了应用复杂度,提高了系统的可维护性和一致性。 - 赋能实时分析与 AI:对时间序列多聚合器的支持、JSON 数值精度的细粒度控制以及 Array 的服务端聚合能力,使得 Redis 在处理实时指标、传感器数据、金融行情以及 AI 向量索引等场景下更加高效。特别是内存占用的优化,对于大规模向量数据库应用具有直接的经济价值。
- 提升高可用性与可靠性:持久化和复制性能的显著提升,直接改善了 Redis 集群在故障恢复和数据同步时的表现,增强了系统在大规模部署下的稳定性。
- 填补数据结构空白:
Array的引入填补了 Redis 在“稀疏、动态、索引寻址且支持聚合”这一特定需求场景下的空白,为日志分析
