Redis 8.0新特性解析

Redis 8.0 带来了一系列革新性的功能升级,极大地提升了其性能与应用场景的适配性,为开发者提供了更强大的数据处理能力。

当前redis 8.0 还处于开发阶段,目前已发布了 8.0-M03 版本。后一个版本是M04

新数据结构集成

Redis 8.0 引入了 7 个新的数据结构,分别是 JSON、时间序列(Time series)、布隆过滤器(Bloom filter)、布谷鸟过滤器(Cuckoo filter)、Count-min sketch、Top-k 和 t-digest。这些数据结构为用户提供了更多的数据处理和存储选择,可以满足不同场景下的需求。

例如,JSON 数据结构可以方便地处理 JSON 格式的数据;时间序列数据结构适用于时间序列数据的存储和分析;布隆过滤器可以用于快速判断一个元素是否在一个集合中;布谷鸟过滤器也是一种高效的集合数据结构;Count-min sketch 可以用于近似计数;Top-k 可以用于找出数据中的前 k 个最大值;t-digest 可以用于近似计算数据的分布。。这些结构的加入,使得 Redis 能够更高效地处理各类数据。以 JSON 数据结构为例,它让 Redis 原生支持 JSON 格式数据的处理,开发者无需进行复杂的格式转换,就能轻松实现数据的存储与读取,显著提升开发效率。下面为你展示 JSON 数据结构的具体用法:

JSON数据结构

https://redis.io/docs/latest/commands/json.set/

存储 JSON 数据:使用JSON.SET命令可以将 JSON 数据存储到 Redis 中。例如,要存储一个表示用户信息的 JSON 对象:

JSON.SET user:1 $. '{"name": "John", "age": 30, "city": "New York"}'

上述命令中,user:1是键,$.表示根路径,后面的 JSON 字符串就是要存储的数据。

2. 获取 JSON 数据:通过JSON.GET命令获取存储的 JSON 数据。

JSON.GET user:1

执行该命令后,会返回完整的用户信息 JSON 对象。

3. 更新 JSON 数据:利用JSON.SET命令还能更新已存储的 JSON 数据。比如要将用户的年龄更新为 31 岁:

JSON.SET user:1 $.age 31

查询 JSON 数据中的特定字段:如果只需要获取用户的名字,可以指定路径查询。

JSON.GET user:1 $.name

这样就能精准获取到name字段的值。

查询引擎扩展

Redis 8.0 集成了可扩展的查询引擎,支持向量搜索,极大地增强了其在大规模数据处理和复杂查询场景下的能力。该查询引擎具备水平和垂直扩展功能。水平扩展可在集群数据库中查询,通过索引管理大规模数据集,并通过扩展到更多 Redis 进程来支持更高的读写吞吐量;垂直扩展则通过添加更多处理能力,使查询吞吐量比以前高出 16 倍 ,让 Redis 社区版成为最快的免费矢量数据库。

I/O 线程新实现

在 8.0 - M03 版本中,新增的 I/O 线程实现(#13695)是一大亮点。这一实现充分利用多核环境的优势,有效提升了系统的吞吐量。通过多线程并行处理 I/O 操作,Redis 能够更快速地响应大量的读写请求,显著提升了在复杂硬件环境下的运行效率,为高并发场景下的数据处理提供了更有力的支持。

Redis 版本 I/O 线程工作方式 核心改进 优缺点
Redis 5.x 及之前 无 I/O 线程 - 所有操作(网络 I/O 和命令执行)均由单线程处理。 优点:- 设计简单,原子性保证强。缺点:- 单线程性能瓶颈明显,无法利用多核 CPU。
Redis 6.0 I/O 线程同步模型 - 引入 I/O 线程处理网络读写(readQueryFromClient 和 writeToClient)。- 主线程同步等待所有 I/O 线程完成任务后继续执行。 优点:- 网络 I/O 性能提升,适合高并发场景。缺点:- 主线程需同步等待所有 I/O 线程完成才能处理,无法完全并行化。- 多核利用率受限。
Redis 8.0 I/O 线程异步事件驱动模型 - I/O 线程完全独立,采用事件驱动模型(每个线程独立 epoll 事件循环)。- 主线程和 I/O 线程通过无锁队列和事件通知(eventfd/pipe)通信。- 主线程无需等待 I/O 线程,并行处理命令和网络 I/O。 优点:- 主线程和 I/O 线程完全并行,最大化多核利用率。- 网络 I/O 延迟显著降低。缺点:- 实现复杂度高- 特殊客户端(如副本、订阅)仍需主线程处理。

复制机制改进

Redis 8.0 全新的复制机制(#13732 )在性能和稳定性上有了质的飞跃。

参考文档

Redis 官方文档

Redis 8.0 Release Notes

异步 IO 线程 by ShooterIT · 提交请求 #13665 · redis/redis — Async IO threads by ShooterIT · Pull Request #13665 · redis/redis

作者

deepwzh

发布于

2025-01-31

更新于

2025-02-15

许可协议

评论