Redis是一款高性能的内存数据库,具有丰富的数据结构和强大的功能,在整个软件开发领域,Redis在缓存、分布式锁、大数据处理等领域应用广泛。
Redis 8.0 正式版 (GA) 发布!Redis 8.0 不仅带来了性能上的进一步提升,还带来一些实用的新特性与功能增强。
Redis8.0新特性
1.数据结构
Redis 8.0新增了8种数据结构,分别是向量集合 (vector set)、JSON、时间序列,以及5种概率结构,包括布隆过滤器、布谷鸟过滤器、Count-min sketch、top-k 和 t-digest。
1.1 向量集合 (vector set)
这是一种用于向量相似性搜索的新数据类型。由 Redis 的原始创建者 Salvatore Sanfilippo 开发,向量集借鉴了有序集(sorted set)的灵感,并扩展了有序集的概念,允许存储和查询高维向量嵌入,从而增强了 Redis 在涉及语义搜索和推荐系统等 AI 用例中的能力。向量集补充了 Redis Query Engine 中现有的向量搜索功能。
1.2 JSON
在 Redis 8 中,JSON 数据结构允许将 JSON 文档作为键存储在 Redis 中。Redis 提供了使用 JSONPath 语言检索和操作文档的命令,以实现对特定元素的更细粒度且高效的访问。Redis 还支持原子更新,因此可以修改 JSON 文档的某些部分,而无需先检索整个文档。
1.3 时间序列 (TIMESERIES)
时间序列简化了处理快速变化的带时间戳数据(如来自物联网传感器、系统遥测、股票价格、商品价格、外汇汇率和加密货币价格的数据)的用例。
1.4 概率性数据结构
概率性数据结构能够更快地处理关于数据流和大型数据集的常见问题。Redis 8.0新推出了有 5 种概率性数据结构。
1.5 Bloom filter 和 Cuckoo filter
用于检查给定值是否已在数据流中出现过
1.6 Count-min sketch
用于估计给定值在数据流中出现的次数
1.7 Top-k
用于查找数据流中最常见的值
1.8 t-digest
用于查询数据流中有多少比例的值小于/大于给定值
2 查询引擎增强
Redis 8.0除了K-V查找,现在支持 Hash 和 JSON 数据结构上创建二级索引。支持更复杂的查询:精确匹配、范围查询、全文搜索(支持词干提取、同义词扩展、模糊匹配)以及向量相似性搜索。
2.1 引入多线程技术
Redis 8.0 的查询引擎引入多线程查询执行,允许查询并发访问索引。这有效解决了传统单线程架构下,复杂查询尤其是数据量达到数亿文档级别时成为性能瓶颈的问题。通过多线程,实现了垂直扩展,在保持低延迟(平均查询延迟低于 10 毫秒)的同时,显著提升了查询吞吐量,相比之前提升了 16 倍。
2.2 支持水平扩展
支持在集群数据库中进行查询,允许使用索引管理非常大的数据集,并通过扩展到更多 Redis 进程来支持更高的读写吞吐量,能够应对不断增长的数据量和查询需求。
2.3 优化数据访问与查询调度
通过优化常用代码的数据访问模式、回复处理等,降低了计算延迟,提升了查询调度效率,使得命令的速度更快,性能更可预测且更稳定。例如,在 Redis 8.0-M02 中,ZADD 的延迟减少高达 36%,SMEMBERS 的延迟减少高达 28%,HGETALL 的延迟减少高达 10%。
2.4 增强搜索与过滤能力
Redis 8.0彻底整合了搜索(RediSearch)等独立模块,其查询引擎支持文本搜索、多字段过滤,能在超低延迟下实现复杂多维查询和全文检索。同时,结合新的数据结构如五类概率数据结构(Bloom Filter、Cuckoo Filter、Count-min Sketch、Top-k、t-digest),可以满足大数据环境下的高效统计与过滤需求,能应对海量数据流的噪声过滤、Top-k 推荐、高性能统计排行榜等场景。
2.5 支持向量计算
Redis 8.0支持向量计算,新增的 Vector Set(Beta) 数据结构,基于 Sorted Set 设计理念,助力 AI 相似内容检索,适用于推荐系统、智能问答、图像检索等新兴 AI 应用中的向量相似度检索。在基准测试中,Redis 8.0 可以维持每秒66K - 160K向量插入,对于不同精度的索引配置都有良好表现。
3 性能提升
Redis Query Engine可以通过两种新的方式进行扩展,官方实测可以通过水平(集群)和垂直(多线程)扩展,查询处理能力能提升 16 倍。
其次是命令执行速度大大提升,在 149 个基准测试中,90 个命令运行更快,延迟更低,最高的提升了87%。
并且新版本引入的新复制机制,使同步时间减少 18%,这还是和 7.2.5相比,如果和更早的版本比,提升会更大。
在Redis 8 中,引入了新的 I/O 线程实现,可以通过设置 io-threads 配置参数来启用它,开启之后,可以把吞吐量提升1倍。