关于Valkey你需要知道的事情
关于Valkey你需要知道的事情
前言
Valkey is an open source (BSD) high-performance key/value datastore that supports a variety of workloads such as caching, message queues, and can act as a primary database. The project is backed by the Linux Foundation, ensuring it will remain open source forever.
Valkey 是 Redis 的一个开源分支(fork),由 Linux 基金会支持,于 2024 年 3 月因 Redis 许可证从 BSD 3-clause 转为更严格的源代码可用许可证(RSALv2 和 SSPLv1)而创建。Valkey 基于 Redis 7.2.4 版本,旨在保持开源特性并进一步优化性能和功能。
看到这里你可能满头问号,什么是BSD 3-clause协议,什么又是RSALv2 和 SSPLv1协议?
BSD 3-clause VS RSALv2 & SSPLv1
BSD协议的前世今生
BSD许可证(英语:Berkeley Software Distribution license)是自由软件中使用最广泛的许可证之一。BSD就是遵照这个许可证来发布,也因此而得名 BSD许可证。
BSD包最初所有者是加州大学的董事会,这是由于 BSD 源自加州大学伯克利分校。BSD开始后,BSD许可证得以修正,使得以后许多BSD变种,都采用类似风格的条款。
跟其他条款相比,从GNU通用公共许可证(GPL)到限制重重的著作权(Copyright),BSD许可证比较宽松,甚至跟公有领域更为接近。事实上,BSD许可证被认为是copycenter(中间著作权),介乎标准的copyright与GPL的copyleft之间。”Take it down to the copy center and make as many copies as you want”[1]。可以说,GPL强迫后续版本必须一样是自由软件,BSD的后续版本可以选择要继续是BSD或其他自由软件条款或封闭软件等等。——Wikipedia
BSD 3-Clause 许可证(BSD 3-Clause License,又称 Revised BSD License 或 New BSD License)是一种 高度宽松的开源许可证,允许用户自由使用、修改和分发代码,几乎没有任何使用限制(包括商业用途)。它是 Berkeley Software Distribution(BSD)操作系统及其衍生软件的传统许可证。
核心条款(3个主要条件)
许可证名称中的 “3-Clause” 指它包含 3 个基本约束条件:
- 保留原始版权声明(Redistributions must retain the original copyright notice)
- 任何分发或修改后的代码必须 包含原始作者的版权声明。
- 保留许可证文本(Redistributions must include the license text)
- 所有副本(无论是二进制还是源代码)必须附带 完整的 BSD 3-Clause 许可证文本。
- 禁止使用作者名进行推广(Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission)
- 不得使用原作者或贡献者的名字 为衍生作品背书或营销,除非获得明确书面许可。
BSD 3-Clause由于极其宽松的限制,允许闭源、商用,无需回报社区,因而受到了商业公司的大力追捧。
RSALv2 & SSPLv1协议的前世今生
RSALv2全称Redis Source Available License,是由Redis公司为主导,核心目标是限制云厂商商业化托管服务因而推出的协议,可以说是专门为了云厂商而制定的协议,RSALv2限制了云厂商(如AWS/Azure)将其作为托管服务商业化提供(需与Redis签订商业协议),但允许其他企业内部使用或开发专有软件。
SSPLv1全称Redis Source Available License,是由MongoDB为主导,防止SaaS厂商规避开源贡献而制定的协议。
其要求 任何提供SSPL软件作为服务的行为 必须开源整个服务栈的代码(包括管理工具、监控系统等),非SaaS场景下可自由使用(如本地部署)。
OK,说了这么多,你可能也看晕了,下面用一张图标来进行一个总结:
义务 | RSALv2 | SSPLv1 | BSD 3-Clause |
---|---|---|---|
保留版权声明 | ✅ | ✅ | ✅ |
允许修改/闭源 | ✅(非云场景) | ✅(非SaaS场景) | ✅ |
云/SaaS触发条款 | ❌云托管 | ❌SaaS需开源 | 无限制 |
专利授权 | 有(限制性) | 有 | 无 |
Redis自 2024 年 3 月起,采用 RSALv2 和 SSPLv1 许可证,限制了云服务提供商和某些商业场景的自由使用,引发社区不满,导致 Valkey 的诞生。
Valkey的优势
与 Redis 的兼容性与迁移简便性
作为 Redis 7.2.4 的直接分支,Valkey 保留完全兼容性,支持 Redis 的 API、命令和数据结构(如字符串、哈希、列表、集合等)。迁移只需更改连接配置(如 YAML 文件中的一行),无需修改代码。AWS ElastiCache 和 MemoryDB 支持无缝迁移。但是需要注意的是,Redis 提供专有模块(如 RedisBloom、RedisGraph、RedisTimeSeries),Valkey 当前不支持,但社区正在开发替代方案。
性能优化
多线程支持
Valkey 引入了多线程 I/O 和命令执行,充分利用多核处理器,显著提升写密集型工作负载的吞吐量。Valkey 8.0 发布宣称可达 100 万请求每秒(RPS),比 Redis 开源版本(7.2.4)快 3 倍。
More Detail:https://aws.amazon.com/cn/blogs/china/valkey-performance-testing-exploring-version-changes-and-cloud-hosting-performance-improvements/
异步 I/O
Valkey 通过异步 I/O 线程降低延迟,提升实时应用响应速度,优于 Redis 的单线程主导架构。
Valkey 的多线程和异步 I/O 使高吞吐量场景(如实时分析、电商库存更新)表现更优,尤其适合现代硬件。
内存效率
新字典结构:Valkey 优化了字典结构,减少内存占用,适合大规模数据集场景。
内存密度提升:Valkey 8.0 通过 AWS 的贡献提高了集群内存密度,优化了内存密集型工作负载。
内存管理:Redis 的内存管理较为传统,在大数据集或高并发场景下内存效率较低,Valkey 的内存优化降低运营成本,适合缓存、会话存储等内存敏感应用。
集群监控
每槽指标:Valkey 提供按槽(per-slot)粒度的性能和使用模式指标,帮助管理员主动识别和解决性能瓶颈。
Redis 的监控功能较为基础,缺乏细粒度指标,难以满足复杂应用的监控需求,Valkey 的高级观测性对需要深入性能分析的场景(如大规模缓存或实时数据处理)有显著优势。
实验性功能:RDMA 支持
Redis 开源版本不原生支持 RDMA,限制了其在高性能计算场景的应用,而Valkey提供实验性 RDMA(远程直接内存访问)支持,可在特定高性能环境中大幅提升性能。
这里需要简单介绍一下什么是RDMA技术。
传统 Redis 的数据处理瓶颈
典型请求路径(TCP/IP 模式)
当客户端发送一个 GET key
请求时,Redis Server 端的处理流程如下:
1. 网卡接收 TCP 报文 → 内核协议栈(TCP/IP 解包)→ 数据拷贝到内核缓冲区
2. 内核通过系统调用(read())将数据拷到用户态(Redis 进程)
3. Redis 主线程解析命令(如识别 "GET")
4. 从内存哈希表中查找 `key` 对应的值
5. 反向重复上述步骤:用户态 → 内核 → 网卡 → 客户端
关键瓶颈:
- 数据拷贝:至少 2 次内核态↔用户态拷贝(即使使用零拷贝技术如
sendfile
,命令解析仍需用户态介入)。 - CPU 开销:协议栈处理(校验和、序列号等)占大量 CPU 周期(尤其在 10Gbps+ 高带宽场景)。
Valkey 的 RDMA 如何绕过这些瓶颈?
RDMA 的 Server 端角色
RDMA 在 Valkey Server 端的核心创新是: 将内存中的键值数据直接暴露给网卡,客户端可通过 RDMA 协议 直接读取或修改 Server 内存,无需经过传统内核协议栈和 Redis 主线程的解析。
具体绕过机制
以 GET key
为例,RDMA 模式下的流程:
1. 客户端预先与 Server 协商好:
- Key 的内存地址(通过注册的 Memory Region)
- 权限(只读/读写)
2. 客户端网卡直接发起 RDMA READ 操作:
- 通过 RoCE/InfiniBand 协议包,指定目标地址(Server 内存中 `key` 的位置)
- 数据从 Server 内存 → 客户端内存,全程无需 Server 的 CPU 参与
3. Server 的 RDMA 网卡自主完成数据传输:
- 校验权限和地址合法性(通过保护域 Protection Domain)
- 直接访问内存数据并返回
关键突破:
- 零拷贝:数据不经过内核,也不触发 Server 的 CPU 中断。
- 零解析:客户端需提前知道 Key 的内存布局(依赖预注册的元数据),跳过命令解析步骤。
步骤 | TCP/IP 模式 | RDMA 模式 |
---|---|---|
网络协议处理 | 内核 TCP/IP 栈 | 网卡硬件处理(RoCE/IB) |
数据处理线程 | Redis 主线程参与 | 无 CPU 参与(完全网卡卸载) |
数据路径 | 用户态 ↔ 内核态多次拷贝 | 网卡 ↔ 内存直通 |
延迟分布 | 毫秒级(CPU 调度抖动) | 微秒级(硬件确定性强) |
RDMA目前的限制
- 仅支持简单 KV 操作
GET/SET
可直接映射为 RDMA READ/WRITE。- 复杂命令(如
INCR
、LPUSH
)仍需走 TCP 路径(需 CPU 执行逻辑)。
- 客户端需改造
- 传统 Redis 客户端无法直接使用,需集成 RDMA 库(如
libibverbs
)。
- 传统 Redis 客户端无法直接使用,需集成 RDMA 库(如
- 安全边界模糊
- Server 内存直接暴露给客户端,依赖网络隔离和硬件校验(如 P_Key)。
- 网卡支持
- 必须使用支持的RDMA 网卡
社区的支持
Valkey由 Linux 基金会托管,得到 AWS、Google Cloud、Oracle、Snap Inc. 等公司支持,贡献者包括 Redis 原核心开发者(如 Madelyn Olson 和 Binbin Zhu)。Valkey 8.1(2025 年 4 月发布)显示出快速迭代能力,性能提升 10%,TLS 连接管理更高效。
Redis 由Redis公司进行维护,商业支持强大,但社区贡献受限,核心开发主要由公司控制。 Valkey 的社区驱动模式和广泛行业支持确保长期开发活力和快速功能迭代,降低对单一厂商的依赖。
综上,我们简单总结一下Valkey:
- 完全开源的 BSD 许可证,得到广泛行业支持。
- 多线程、异步 I/O 和内存优化带来显著性能提升(最高 100 万 RPS)。
- 改进的集群管理(自动故障转移、可靠槽迁移)。
- 细粒度观测性和实验性 RDMA 支持。
- 与 Redis 的高兼容性,迁移成本低。
结语
Redis经过多年的发展,在互联网行业内的地位牢不可破,但Valkey作为社区的新宠儿,在多家云厂商的推崇下,发展前景也是非常的可期,不过真的要在生产环境将Redis替换为Valkey,还有待验证,我们可以持续观望社区的动态。