Redis新增Array数据类型:18个命令+服务端正则匹配+WASM在线体验

Redis之父为Redis引入全新Array数据类型,含18个命令及服务端正则匹配能力。
Redis之父antirez提交PR,为Redis新增Array数据类型,包含18个专用命令,弥补了List在随机索引访问上的性能短板。其中ARGREP命令集成TRE正则库,支持服务端正则匹配和计算下推,大幅减少网络传输开销。Simon Willison借助Claude Code构建了基于WebAssembly的浏览器端Playground,供开发者零安装在线体验。该功能尚未合并主线,但对Redis生态和竞争格局意义重大。
Redis 迎来全新 Array 数据类型
Redis 之父 Salvatore Sanfilippo(antirez)近日向 Redis 提交了一个重磅 PR,为 Redis 引入了一种全新的数据类型——Array(数组)。这不是对现有 List 类型的简单扩展,而是一套拥有 18 个专用命令的完整数据结构,带来了服务端正则匹配等强大能力。另一边,Simon Willison 借助 Claude Code 构建了一个基于 WebAssembly 的浏览器端交互式 Playground,让开发者无需安装即可在线体验这些新命令。
Salvatore Sanfilippo(网名 antirez)是意大利程序员,2009 年创建了 Redis 项目。Redis 最初是为了解决他在开发实时 Web 分析系统 LLOOGG 时遇到的性能问题而诞生的。2020 年,antirez 宣布从 Redis 的日常维护工作中退出,将项目交给核心团队。2024 年 Redis 将许可证从 BSD 改为 RSALv2/SSPL 双许可,引发了社区分叉(如 Valkey、Redict 等项目)。此次提交 Array 类型的 PR,标志着他在离开日常维护数年后,仍在为 Redis 贡献重要的新功能,这对 Redis 社区而言是一个积极信号。
Redis 数据类型体系的演进
Redis 自诞生以来,其核心竞争力之一就是丰富的数据结构支持。从最初的 String、List、Set、Sorted Set、Hash 五大基础类型,到后来陆续加入的 HyperLogLog(基数估算)、Bitmap(位图)、Stream(消息流)、Geospatial(地理位置)等,Redis 的数据类型体系不断扩展。每种类型都针对特定场景做了深度优化,例如 Sorted Set 的跳表实现使其在排行榜场景中表现出色,Stream 则为消息队列场景提供了原生支持。Array 类型的加入,填补了 Redis 在"按索引高效随机访问"这一基础数据结构语义上的空白。
18 个新命令一览
新的 Array 类型引入了一整套以 AR 为前缀的命令,覆盖了增删改查、范围操作、扫描匹配等常见场景:
- 基础操作:
ARSET、ARGET、ARDEL、ARLEN、ARINSERT - 批量操作:
ARMGET、ARMSET、ARGETRANGE、ARDELRANGE - 遍历与搜索:
ARSCAN、ARSEEK、ARNEXT、ARGREP - 统计与信息:
ARCOUNT、ARINFO - 其他:
AROP(运算操作)、ARRING(环形缓冲)、ARLASTITEMS(获取末尾元素)
这套命令的设计既保持了 Redis 一贯的简洁命令风格,又提供了足够丰富的操作语义。对于熟悉 Redis 命令体系的开发者来说,上手成本很低。
为什么不直接扩展 List?
Redis 现有的 List 类型底层采用 quicklist(快速列表)实现,本质上是一个由多个 ziplist(压缩列表)组成的双向链表。这种结构在头尾插入和弹出操作上表现优异(O(1) 复杂度),非常适合队列和栈的使用场景。但当需要按索引随机访问中间元素时,List 的时间复杂度为 O(N),性能会随数据量增长而显著下降。Array 类型则更接近传统编程语言中的数组语义,支持 O(1) 或接近 O(1) 的索引访问,同时提供了范围操作和服务端模式匹配等 List 无法高效实现的能力。这也解释了为什么 antirez 选择引入一个全新的数据类型,而非在 List 上叠加功能。
环形缓冲:ARRING 的应用场景
值得单独说明的是 ARRING 命令实现的环形缓冲(Ring Buffer)语义。环形缓冲是计算机科学中的经典数据结构,也称为循环缓冲区,它使用固定大小的数组,当写入到达末尾时自动回绕到开头,覆盖最旧的数据。这种结构在操作系统内核的日志系统、网络数据包缓冲、音视频流处理等场景中广泛使用。在 Redis 的 Array 类型中引入环形缓冲语义,意味着开发者可以原生实现"保留最近 N 条记录"的功能——例如最近的用户操作日志、最新的传感器读数、滑动窗口统计等——而无需手动维护数组大小和清理旧数据的逻辑。
ARGREP:服务端正则匹配改变数据过滤方式
在所有新命令中,ARGREP 无疑是最值得关注的。它支持在 Redis 服务端直接对数组中的值进行正则表达式匹配(grep),底层集成了 TRE 正则表达式库。
TRE 是一个轻量级、POSIX 兼容的正则表达式库,由芬兰开发者 Ville Laurikari 开发。与常见的 PCRE(Perl Compatible Regular Expressions)库不同,TRE 的一大特色是支持近似匹配(approximate matching),即允许在指定的编辑距离内进行模糊匹配。更重要的是,TRE 采用确定性有限自动机(DFA)算法,保证了匹配时间与输入长度呈线性关系,不会出现某些正则引擎在特定模式下的指数级回溯问题(即 ReDoS 攻击风险)。这一特性对于 Redis 这样的高性能服务端系统尤为重要——它确保了 ARGREP 命令在处理用户提供的正则表达式时不会因恶意模式而导致服务阻塞。
过去开发者需要将大量数据从 Redis 拉取到客户端再做过滤,现在可以直接在 Redis 层面完成模式匹配。ARGREP 支持多种选项组合:
- MATCH:指定匹配模式
- AND / OR:多条件逻辑组合
- LIMIT:限制返回结果数量
- WITHVALUES:返回匹配的值
- NOCASE:忽略大小写
计算下推:将过滤逻辑推向数据
这种将计算推向数据所在位置的设计,体现了数据库领域中"计算下推"(pushdown)的经典思想。这一理念在关系型数据库中早已是标准实践——SQL 的 WHERE 子句就是典型的计算下推。在分布式系统和大数据领域,这更是核心原则:与其将海量数据搬运到计算节点,不如将计算逻辑推送到数据所在的位置。
对于 Redis 这样的内存数据库,虽然数据访问本身极快,但网络传输往往是真正的瓶颈。当一个数组包含数万甚至数十万元素时,将全部数据传输到客户端再过滤,不仅浪费带宽,还会增加客户端的内存压力和垃圾回收负担。ARGREP 的服务端过滤可以将返回数据量降低几个数量级,尤其适合需要在大规模数组数据中进行文本搜索和过滤的场景。
浏览器内的 WASM Playground:零安装在线体验
Simon Willison 利用 Claude Code(Web 版)构建了一个 交互式 Redis Array Playground,将 Redis 的一个子集编译为 WebAssembly,使其完全在浏览器中运行。
WebAssembly(简称 WASM)是一种由 W3C 标准化的二进制指令格式,旨在为 Web 浏览器提供接近原生的执行性能。WASM 的核心价值在于它允许将 C、C++、Rust 等语言编写的程序编译为可在浏览器沙箱中安全运行的字节码。Redis 本身是用 C 语言编写的,这使得将其核心逻辑编译为 WASM 成为可能。这种"将服务端软件搬进浏览器"的做法近年来越来越流行,SQLite 的 WASM 版本(sql.js)、PostgreSQL 的 PGlite 等项目都采用了类似思路。
这个 Playground 的交互设计很直观:
- 左侧边栏列出所有可用的 Array 命令
- 主面板提供参数配置界面,包括下拉选择、复选框等控件
- 底部区域实时显示构建出的完整命令和执行结果
开发者可以零成本地探索每个命令的行为,理解不同参数组合的效果,不需要本地编译 Redis 分支就能上手试用。
值得一提的是,这个工具本身也是 AI 辅助开发的产物——Simon 通过 Claude Code 完成了从 Redis WASM 编译到前端 UI 的整个构建过程。Simon Willison 是 Django Web 框架的联合创始人,近年来以其对 AI 工具的深度探索和开源项目 Datasette(数据探索工具)而广为人知。他在博客中持续记录各种 AI 编程工具的使用体验,是 AI 辅助开发领域最活跃的实践者之一。
AI 辅助开发的实践样本
Salvatore 在其博客文章 Redis array type: short story of a long development 中详细记录了 Array 类型的开发过程,包括他如何借助 AI 编程工具来加速开发。作为 Redis 的原始创造者,他对 AI 工具的使用态度和实践方法值得参考。
从这个案例中可以看到一个值得关注的趋势:不仅是核心功能的开发借助了 AI,围绕新功能的配套工具(如 WASM Playground)也在 AI 的帮助下快速成型。这种"AI 辅助开发核心功能 → AI 辅助构建配套工具"的链式效应,正在加速开源项目的迭代节奏。
对 Redis 生态的影响
Array 类型的引入填补了 Redis 数据结构中的一个空白。虽然 Redis 已有 List、Set、Sorted Set 等集合类型,但 Array 提供了更接近传统编程语言中数组的语义——支持按索引随机访问、范围操作,以及最关键的服务端模式匹配能力。这些是现有 List 类型难以高效实现的。
目前该实现仍在分支阶段,尚未合并到 Redis 主线。但考虑到提交者是 antirez 本人,且功能设计已相当完整(18 个命令覆盖了主要使用场景),它在未来 Redis 版本中正式落地的可能性很高。值得注意的是,在当前 Redis 许可证变更引发社区分裂的背景下(Valkey、Redict 等分叉项目已吸引了相当数量的用户和贡献者),Array 类型这样的重要新功能也可能成为 Redis 与其分叉项目之间差异化竞争的筹码。
对于关注 Redis 发展的开发者来说,现在可以通过 WASM Playground 提前了解和评估这些新能力,为后续的技术选型做好准备。
核心要点
- Redis 之父 Salvatore Sanfilippo 提交 PR,为 Redis 新增 Array 数据类型,包含 18 个专用命令
- ARGREP 命令支持服务端正则匹配,集成 TRE 正则库(基于 DFA 算法,天然防御 ReDoS 攻击),可在 Redis 层面直接完成数据过滤
- Array 类型弥补了现有 List 类型在随机索引访问上的性能短板,提供了更接近传统数组的语义
- Simon Willison 借助 Claude Code 构建了基于 WebAssembly 的浏览器端 Playground,无需安装即可体验新命令
- Array 类型和配套工具均采用 AI 辅助开发,展示了 AI 加速开源项目迭代的趋势
- 该功能目前仍在分支阶段,尚未合并到 Redis 主线,但在 Redis 与其分叉项目的竞争格局中具有战略意义
相关推荐
科技前沿GitHub Agent HQ发布:AI编程工具进入平台化竞争时代
GitHub Universe大会发布Agent HQ平台,统一管理编码Agent,Copilot升级支持多模型集成。同期OpenAI完成重组,Anthropic新模型测试,NVIDIA开源系列AI模型,AI编程工具格局加速整合。
科技前沿Gemini 3.5 Flash在GDPval基准上实现巨大飞跃
Google Gemini 3.5 Flash在GDPval基准测试中超越Gemini 3.1 Pro,轻量级Flash模型借助后训练技术逼近前沿水平,重新定义性能与成本的平衡点,为AI应用开发者带来重大利好。
科技前沿Google Gemini Antigravity周配额三倍提升,AI编程不再受限
Google Gemini团队再次将Antigravity周配额提升至三倍,继日配额提升后再次加码。本文解析此次配额调整对开发者的实际影响,以及在AI编程助手竞争格局中的战略意义。