Valkey与Redis评估对比:开源替代方案的技术演进

#作者:朱雷

文章目录

  • 1 概述
    • 1.1内存数据结构存储核心特性
    • 1.2主流内存数据结构存储设计与适用场景
    • 1.3目前主流内存数据结构存储对比
  • 2 Valkey 说明
    • 2.1 哨兵架构设计
    • 2.2 集群架构设计
    • 2.3 valkey 使用企业和业内生态‌
  • 3 评估指标
  • 4 评估结果

1 概述

内存数据结构存储‌是指将数据以特定的逻辑和物理形式直接组织在计算机主内存(RAM)中,以支持高效的动态操作(如增删改查)和实时处理。其核心目标是利用内存的高速读写能力,结合合适的数据结构,满足对性能要求严苛的场景需求。

1.1内存数据结构存储核心特性

1.‌ 超低延迟‌

  • 内存访问速度‌:RAM的访问延迟在纳秒级(约50-100ns),而磁盘I/O延迟在毫秒级(约10ms),两者相差10万倍。
  • 适用场景‌:高频交易系统、实时推荐引擎、缓存层(如Redis、Memcached)。
    2.‌ 动态操作效率‌
  • 随机访问与原地修改‌:内存数据结构支持直接通过指针或偏移量访问元素,无需磁盘寻道或块读取。
  • 对比磁盘存储‌:如B树在磁盘上高效,但内存中哈希表或跳表的查找效率更高(O(1) vs O(log n))。
    3.‌ 灵活性与可扩展性‌
  • 动态内存分配‌:支持运行时按需扩展(如链表、动态数组),而磁盘存储需预分配块或处理碎片化。
  • 复杂逻辑结构‌:内存中可高效实现图、树等复杂结构,而磁盘存储需额外设计索引或压缩策略。

1.2主流内存数据结构存储设计与适用场景

在这里插入图片描述

1.3目前主流内存数据结构存储对比

在这里插入图片描述

2 Valkey 说明

Valkey 是一个开源(BSD-3 许可)的内存数据结构存储,可用作数据库、缓存、消息代理和流引擎。Valkey 提供多种数据结构,例如 字符串、哈希、列表、集合、支持范围查询的有序集合、位图、超级日志、地理空间索引和流。Valkey 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久化功能,并通过Valkey Sentinel提供高可用性,并通过Valkey Cluster实现自动分区。

为了实现最佳性能,Valkey 使用内存数据集。Valkey 可以通过定期将数据集转储到磁盘或将每个命令附加到基于磁盘的日志来持久化数据。如果您只需要功能丰富的联网内存缓存,也可以禁用持久化功能。Valkey 支持异步复制,具有快速无阻塞同步和网络分裂时自动重新连接以及部分重新同步的功能。可以在大多数编程语言中使用 Valkey。

该项目是在过渡到新的可用源许可证之前从开源 Redis 项目fork而来的,源于Redis 7.2.4 分支,由Redis原核心开发者组建,专注于兼容性优化和云原生适配‌。采用 ‌BSD-3‌ 协议,允许自由使用、修改和分发,并由Linux基金会管理,社区贡献者包括 AWS、阿里云、谷歌等头部企业,治理模式开放透明‌。

Valkey是Redis 许可证协议问题或闭源后的直接替代品,由Redis 的原社区开发者开发和维护,完全兼容 开源版本Redis 协议与架构设计,使用方式与Redis类似,用户可以像使用Redis一样使用Valkey‌。自项目启动以来,Valkey已经在业界被广泛使用,并且得到了亚马逊云科技的积极支持‌。

2.1 哨兵架构设计

Valkey Sentinel 的主要功能包括:
1.‌ 监控 Valkey 实例状态‌:Valkey Sentinel 负责监控 Valkey 主从节点的状态,通过定期检查确保节点的可用性,检测节点的心跳、配置变化等情况。

2.‌ 自动故障检测与通知‌:当 Valkey Sentinel 发现某个节点不可用时,会立即通知其他 Sentinel 和客户端,触发故障转移流程。

3.‌ 自动故障转移‌:在主节点不可用时,Valkey Sentinel 负责选择一个合适的
从节点升级为主节点,并通知其他节点和客户端更新配置,实现自动的故障转移。

4.‌ 配置提供‌:Valkey Sentinel 为客户端提供关于当前 Valkey 集群的信息,包括主从关系、故障节点等,客户端可以通过 Sentinel 获取集群配置以便进行连接。

5.‌ 通知机制‌:Valkey Sentinel 通过发布订阅模式实现对节点状态变化的通知,使其他节点和客户端能够及时了解集群的变化。

在这里插入图片描述

2.2 集群架构设计

Valkey Cluster 架构设计是围绕高性能、高可用性和可扩展性构建的,其核心思想源于 Redis Cluster,但在实现细节和优化方向上进行了创新,以适应现代分布式系统的需求。

以下是 Valkey Cluster 架构设计的关键点和分析:

  1. 分布式架构与数据分片‌
  • 数据分片(Sharding)‌:
    Valkey Cluster 将数据分散到多个节点上,每个节点负责一部分数据(称为“槽位”或“slot”)。默认情况下,数据被分为 16384 个槽位,每个槽位可以映射到集群中的任意节点。这种设计使得数据可以水平扩展,支持大规模数据存储。
  • 节点角色‌:
    集群中的节点分为两类:
    • 主节点(Master)‌:负责处理读写请求,并维护槽位的数据。
    • 从节点(Replica)‌:作为主节点的副本,提供高可用性和读扩展能力。当主节点故障时,从节点可以自动提升为主节点。
  • 一致性哈希‌:
    Valkey Cluster 使用一致性哈希算法来分配槽位,确保数据均匀分布,并在节点增减时最小化数据迁移。
  1. 高可用性与故障转移‌
  • 故障检测与自动恢复‌:
    Valkey Cluster 通过节点间的 Gossip 协议定期交换状态信息,检测节点是否存活。如果主节点故障,集群会自动将从节点提升为主节点,并重新分配槽位。
  • 多副本与数据持久化‌:
    每个槽位的数据在集群中可以有多个副本(主从复制),确保数据的高可用性。同时,Valkey 支持 RDB 和 AOF 两种持久化方式,防止数据丢失。
  • 手动故障转移‌:
    除了自动故障转移,Valkey 还支持手动故障转移(如 CLUSTER FAILOVER 命令),允许管理员在维护时主动切换主节点。
  1. 集群通信与协议‌
  • Gossip 协议‌:
    Valkey Cluster 使用 Gossip 协议进行节点间的通信,传播集群状态信息(如节点上线、下线、槽位分配等)。这种协议具有去中心化、容错性强的特点。
  • MOVED 重定向‌:
    当客户端请求的槽位不在当前节点时,节点会返回 MOVED 错误,并告知客户端正确的节点地址。客户端需要重新路由请求到正确的节点。
  • ASK 重定向‌:
    在槽位迁移过程中,如果客户端请求的槽位正在迁移中,节点会返回 ASK 错误,并告知客户端临时目标节点。客户端需要先发送 ASKING 命令,再发送实际请求。
  1. 可扩展性与性能优化‌
  • 水平扩展‌:
    Valkey Cluster 支持动态添加或删除节点,集群会自动重新分配槽位,实现无缝扩展。
  • 读写分离‌:
    客户端可以配置只从从节点读取数据(READONLY 命令),减轻主节点的压力,提高读性能。
  • Pipeline 与异步操作‌:
    Valkey 支持 Pipeline 操作,允许客户端批量发送命令,减少网络往返时间。此外,异步操作(如异步复制)可以进一步提高性能。
  • 内存优化‌:
    Valkey 在内存管理上进行了优化,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),并提供了内存淘汰策略(如 LRU、LFU)来管理内存。
  1. 监控与管理‌
  • 集群状态监控‌:
    Valkey 提供了 CLUSTER INFO、CLUSTER NODES 等命令,允许管理员查看集群状态、节点信息、槽位分配等。
  • 配置管理‌:
    管理员可以通过 CLUSTER MEET、CLUSTER ADDSLOTS 等命令动态管理集群配置。
  • 慢查询日志‌:
    Valkey 支持慢查询日志,帮助管理员识别性能瓶颈。
  1. 与 Redis Cluster 的区别‌
  • 性能优化‌:
    Valkey 在 Redis Cluster 的基础上进行了性能优化,例如改进了网络通信协议、减少了重定向开销等。
  • 功能增强‌:
    Valkey 可能增加了一些新功能(如更灵活的槽位分配策略、更高效的故障转移机制等),具体取决于其版本和实现。
  • 生态兼容性‌:
    Valkey 通常保持与 Redis Cluster 的兼容性,使得现有的 Redis 客户端和工具可以无缝迁移到 Valkey。
    在这里插入图片描述

2.3 valkey 使用企业和业内生态‌

2.3.1 Valkey 的企业应用现状‌
1.‌ 云服务厂商的采用‌

  • AWS‌:将Valkey集成至ElastiCache服务,推出Valkey 7.2版本,提供20%-33%的成本节约,并推出Valkey Glide客户端,支持多语言(Java、Python等)及智能拓扑感知,适配微服务、实时消息等场景。
  • 阿里云‌:作为Valkey社区核心维护者,将内部Redis优化成果(如集群无感扩缩容、主从无感HA)贡献至Valkey,并计划引入TairHash、TairString等增强型数据结构。
  • 华为云‌:通过参与Valkey社区建设,推动Sentinel组件优化及逻辑多租引擎方案,帮助企业降低Redis使用门槛。
    2.‌ 操作系统与发行版的集成‌
  • Arch Linux‌:2025年4月宣布将Valkey作为默认内存型数据库,取代Redis,成为首个在核心发行版中完成迁移的主流系统。
  • 其他Linux发行版‌:Valkey的BSD-3协议兼容性及Redis命令兼容性,使其成为Red Hat、Ubuntu等发行版考虑替换Redis的候选方案。
    3.‌ 企业级应用场景‌
  • 缓存与会话存储‌:Valkey的毫秒级延迟和高吞吐量,使其成为电商、社交平台等场景的首选。
  • 实时消息队列‌:通过Pub/Sub模式及RDMA技术,Valkey在金融交易、IoT数据流等场景中替代Kafka或RabbitMQ。
  • 分布式锁与任务调度‌:利用SETNX、Lua脚本等特性,Valkey在微服务架构中实现跨节点资源协调。
    2.3.2 Valkey 的业内生态‌
    1.‌ 开源社区与基金会支持‌
  • Linux基金会托管‌:Valkey由社区驱动,避免Redis因商业利益导致的许可证变更风险,吸引Redis核心贡献者加入。
  • 活跃的开发者生态‌:GitHub上Valkey已获超2万Star,社区贡献者涵盖AWS、阿里云、谷歌等企业,形成技术迭代闭环。
    2.‌ 技术扩展与插件生态‌
  • Valkey Over RDMA‌:通过RDMA技术优化网络通信,降低集群节点间延迟,适用于高频交易、AI模型推理等场景。
  • 可扩展插件系统‌:支持自定义数据结构(如RedisJSON的替代方案)及访问模式,满足特定行业需求。
    3.‌ 商业解决方案与合作伙伴‌
  • 云原生托管服务‌:AWS ElastiCache for Valkey、阿里云Tair(基于Valkey)等,提供自动化运维、监控告警等企业级功能。
  • 硬件协同优化‌:与AWS Graviton4等ARM架构芯片深度适配,通过IO多线程技术提升性能,降低TCO。
    4.‌ 行业联盟与标准制定‌
  • 跨云兼容性‌:Valkey Glide客户端通过“大多数规则算法”实现集群拓扑动态感知,确保混合云环境下的高可用性。
  • 安全与合规‌:支持RDB+复制backlog双通道持久化,满足金融、医疗等行业的强一致性需求。

3 评估指标

在这里插入图片描述

4 评估结果

Valkey作为Redis社区分叉后的开源项目,凭借其开源协议优势和持续技术创新,已在AWS、阿里云、华为云等头部云厂商及Arch Linux等主流发行版中快速落地,形成了覆盖云原生、数据库、分布式系统等领域的生态格局,展现出成为新一代高性能键值存储标准的潜力。可以作为Redis存在协议风险或闭源之后的替代品

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86835.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio安装NoteGen AI笔记应用程序

华为云FlexusDeepSeek征文 | 基于华为云ModelArts Studio安装NoteGen AI笔记应用程序 引言一、ModelArts Studio平台介绍华为云ModelArts Studio简介ModelArts Studio主要特点 二、NoteGen介绍NoteGen简介主要特点 三、安装NoteGen工具下载NoteGen软件安装NoteGen工具 四、开通…

BUUCTF在线评测-练习场-WebCTF习题[BJDCTF2020]Easy MD51-flag获取、解析

解题思路 打开靶场,有个提交框,输入后url会出现我们提交的参数password http://a48577ed-9a1c-4751-aba0-ae99f1eb8143.node5.buuoj.cn:81/leveldo4.php?password123 查看源码并没用发现什么猫腻,抓包在响应头发现了猫腻 hint: select * …

面向对象三大特性深度解析:封装、继承与多态

面向对象三大特性深度解析:封装、继承与多态 思维导图概览 #mermaid-svg-v2u0XIzKotjyXYei {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-v2u0XIzKotjyXYei .error-icon{fill:#552222;}#mermaid-svg-v2…

mmap映射物理内存之三invalid cache

目录 流程设计 invalid 命令 内核态invalid 内核态invalid,用户态mmap物理地址 PAN机制 PAN机制历程 硬件支持 ARMv8.1-PAN 特性 Linux 内核的适配 软件模拟 PAN(SW PAN) 背景 Linux 的实现 总结 前述刷新cache的流程也同样可…

记忆化搜索(dfs+memo)无环有向图

这是一道可以当作板子的极简记忆化搜索 建立a 是邻接表,其中 a[x] 存储从节点 x 出发能到达的所有节点。 b[x] 记录从节点 x 出发的所有边的权重之和。根据数学原理,我们很容易发现,一个根(起点)的期望,等…

使用AI豆包写一个车辆信息管理页面

记录一个基本的车辆信息管理页面,由豆包撰写完成,只需要微调页面即可。 主要功能是车辆信息的查询、新增、编辑,项目用到了uniapp、vue3、ts、uni-ui、z-paging 页面效果如下: 以上界面均由豆包生成,完成度非常高&am…

《HarmonyOSNext应用防崩指南:30秒定位JS Crash的破案手册》

《HarmonyOSNext应用防崩指南:30秒定位JS Crash的破案手册》 ##Harmony OS Next ##Ark Ts ##教育 本文适用于教育科普行业进行学习,有错误之处请指出我会修改。 💥 哇哦!JS Crash崩溃日志完全解析手册 当你的应用突然闪退时&am…

阅读笔记(3) 单层网络:回归(下)

阅读笔记(3) 单层网络:回归(下) 该笔记是DataWhale组队学习计划(共度AI新圣经:深度学习基础与概念)的Task03 以下内容为个人理解,可能存在不准确或疏漏之处,请以教材为主。 1. 为什么书上要提到决策理论? …

Mac OS系统每次开机启动后,提示:输入密码来解锁磁盘“Data”,去除提示的解决方法

问题描述: Mac mini外接了一个磁盘(EX_Mac)为默认使用的系统盘,内置的硬盘(Macintosh HD)为Mac mini自带的系统盘 外置硬盘系统每次开机都会挂载内置磁盘,同时会提示需要输入密码来解锁磁盘“…

CSS Flex 布局中flex-shrink: 0使用

flex-shrink: 0 是 CSS Flexbox 布局中的一个关键属性,用于禁止弹性项目(flex item)在容器空间不足时被压缩。以下是详细解释和示例: 核心作用 当容器的可用空间小于所有弹性项目的总宽度(或高度)时&#…

WHERE 子句中使用子查询:深度解析与最佳实践

🔍 WHERE 子句中使用子查询:深度解析与最佳实践 在 WHERE 子句中使用子查询是 SQL 的高阶技巧,可实现动态条件过滤。以下是全面指南,涵盖语法、类型、陷阱及优化策略: 📜 一、基础语法结构 SELECT 列 FR…

从0到1:不文明现象随手拍小程序开发日记(一)

前期调研 不文明现象随手拍小程序:在城市的快速发展进程中,不文明现象时有发生,为了有效解决这一问题,提升城市文明程度, 市民若发现不文明行为,如乱扔垃圾、随地吐痰、破坏公共设施、违规停车等&#xff…

STM32F103之SPI软件读写W25Q64

一、W25Q64简介 1.1 简介 W25Q64(Nor flash)、 24位地址,64Mbit/8MByte、是一种低成本、小型化、使用简单的非易失性存储器,常用于数据存储、字库存储、固件程序存储等场景 时钟频率:最大80MHz(STM32F103系统时钟为72MHz…

vue3+element-plus 组件功能实现 上传功能

一、整体功能概述 这段代码实现了一个基于 Vue 3 和 Element Plus 组件库的文件导入及预览功能模块。主要包含了一个主导入对话框(用于上传文件、展示文件相关信息、进行导入操作等)以及一个用于预览文件内容的预览对话框。支持导入特定格式(…

OpenCV中创建Mat对象

第1章 创建Mat对象 1.1. 创建空的 Mat 对象 cv::Mat mat; 1.2. 创建灰度图像 // 创建一个 3 行 4 列、8位无符号单通道矩阵(相当于灰度图) cv::Mat mat(3, 4, CV_8UC1); 1.3. 创建彩色图像 // 创建三通道矩阵(相当于彩色图像&#xff0…

10、做中学 | 五年级下期 Golang循环控制

一、一个小需求 我想要打印10遍hello world,你想怎么编写呢? // 需求:打印10遍"hello world"fmt.Println("hello world")fmt.Println("hello world")fmt.Println("hello world")fmt.Println("hello world…

机器学习算法-K近邻算法-KNN

1. K近邻算法是什么? 定义: K近邻是一种基于实例的懒惰学习(Lazy Learning)算法,用于分类和回归任务。 核心思想:“物以类聚”——通过计算样本间的距离,找到目标点的最近K个邻居,…

基于vue框架的法律知识咨询普及系统gwuv7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,知识类型,律师,律师推荐,法律知识,新闻类型,法律新闻,咨询律师 开题报告内容 基于Vue框架的法律知识咨询普及系统开题报告 一、研究背景与意义 随着法治社会建设的深入推进,公众对法律知识的需求呈现爆发式增长。然而…

Netty 揭秘CompositeByteBuf:零拷贝优化核心技术

CompositeByteBuf 类 核心设计目标​​ ​​虚拟缓冲区​​:将多个 ByteBuf 合并为单一逻辑视图,减少数据复制。​​零拷贝优化​​:通过组合而非复制提升性能。​​引用计数管理​​:统一管理底层 ByteBuf 的生命周期。 核心成…

用css实现文字字体颜色渐变

用css实现文字字体颜色渐变 background-clip 是CSS3中新增的属性,可以用于指定背景图片或颜色的绘制范围。利用 background-clip 属性实现文字颜色从左到右、从绿到白的渐变效果: 代码如下: .gradient-color {background-image: linear-gr…