Valkey 8.0 深度实战:Redis 许可证风波后的终极归宿——单节点 100W QPS、异步 IO 线程与零痛苦迁移的完整指南(2026)
2024 年 3 月,Redis Ltd. 宣布将许可证从 BSD 3-Clause 变更为 RSALv2 / SSPLv1 双许可证,这意味着任何提供 Redis 即服务(Cloud Service)的厂商都必须购买商业授权。AWS、Google Cloud、Azure 等云厂商瞬间面临绝境——继续用 Redis 要交钱,不用则数百万客户怎么办?
答案在 72 小时内揭晓:AWS 牵头,联合 Google、Azure、Oracle 等巨头,fork 了 Redis 7.2.4 的最后一个 BSD 版本,创立了 Valkey。
本文 8000 字深度解析:Valkey 8.0 如何用异步 IO 线程 + 数据预取 + 内存访问优化三项架构革新,把单节点性能推到 100W QPS,完成对 Redis 7.x 的降维打击;并附上生产级迁移指南,让你的系统零改动升级。
目录
- 背景:Redis 许可证变更始末
- Valkey 是什么?谁在背后?
- Valkey 8.0 架构革新:三大性能核武器
- 深度性能基准测试:Valkey vs Redis vs Dragonfly
- 生产迁移完整指南:零改动、零停机
- 源码架构解析:异步 IO 线程如何实现
- Redis Cluster 模式下的 Valkey
- RDMA 支持:内核绕过的内存直接访问
- Valkey 生态与路线图(2026-2027)
- 总结:你应该现在就迁移到 Valkey 吗?
1. 背景:Redis 许可证变更始末
1.1 事件时间线
| 日期 | 事件 |
|---|---|
| 2024-03-20 | Redis Labs 宣布 Redis 7.2.4 起采用 RSALv2 + SSPLv1 双许可证 |
| 2024-03-22 | AWS 宣布 fork Redis,启动 Valkey 项目 |
| 2024-05-01 | Valkey 7.2.5 发布(与 Redis 7.2.4 API 完全兼容) |
| 2024-09-15 | Valkey 8.0 首个 RC 发布,引入异步 IO 线程 |
| 2025-01-10 | Valkey 8.0 GA 正式发布 |
| 2026-06-28 | Valkey 8.0.6 是当前稳定版,单节点 QPS 突破 100W |
1.2 许可证变更到底影响了谁?
不受影响的:
- 在自己服务器上部署 Redis 的公司(BSD 最后版本可继续使用)
- 使用 AWS ElastiCache / MemoryDB 的用户(AWS 已经切换到 Valkey)
受影响的:
- 提供 Redis 云服务的厂商(需要商业授权)
- 无法升级到新版 Redis 的开源项目(License 不兼容)
# 许可证变更的核心矛盾:
#
# 旧许可证 (BSD 3-Clause):
# ✅ 可自由修改、商用、闭源
# ✅ 云厂商可自由提供 Redis 服务
#
# 新许可证 (RSALv2 / SSPLv1):
# ❌ 提供 Redis 托管服务必须购买商业授权
# ❌ SSPL 被 OSI(开源倡议)认定为非开源许可证
1.3 为什么是 AWS 牵头?
Redis Ltd. 的商业模式是「开源核心 + 商业许可」,这与 MongoDB、Elastic 的路径完全一致。但 Redis 的特殊性在于:Redis 最核心的用户是云厂商,而不是企业终端。
AWS ElastiCache 和 MemoryDB 每年为 AWS 贡献 数十亿美元营收,而这些服务底层全部跑的是 Redis。许可证变更后,AWS 有两个选择:
- 向 Redis Ltd. 支付商业授权费(每年估计 5000 万 ~ 1 亿美元)
- Fork 最后一个 BSD 版本,自己维护
AWS 选择了方案 2,并联合其他云厂商,成立了 Valkey 项目,捐赠给 Linux Foundation 管理,确保永远不会再有许可证风波。
2. Valkey 是什么?谁在背后?
2.1 项目定位
Valkey 是 Redis 7.2.4 的 clean fork,也就是说:
- 所有 Redis 命令 100% 兼容
- 所有 Redis 客户端 无需修改
- Redis 数据结构(String/Hash/List/Set/Sorted Set/Stream)完全一样
- Redis 配置文件 完全兼容
# 从 Redis 切换到 Valkey,只需要:
# 1. 停止 redis-server
# 2. 启动 valkey-server(使用相同的配置文件和数据文件)
# 3. 客户端完全不需要改
# 这就是 Valkey 最大的优势:零摩擦迁移
2.2 治理架构:Linux Foundation 托管
Valkey 项目由 Linux Foundation 下的 LF Projects, LLC 管理,采用开放的治理模型:
- 技术指导委员会(TSC):由 AWS、Google、Azure、Oracle 等代表组成
- 决策透明:所有设计文档(design-docs/)完全公开
- 贡献者协议:所有贡献者需签署 DCO(Developer Certificate of Origin)
项目地址:
- GitHub:https://github.com/valkey-io/valkey
- 官网:https://valkey.io
- 性能仪表盘:https://valkey.io/performance
2.3 版本路线图
| 版本 | 发布时间 | 核心特性 |
|---|---|---|
| Valkey 7.2.5 | 2024-05 | 与 Redis 7.2.4 完全兼容,bug 修复 |
| Valkey 8.0 RC1 | 2024-09 | 引入异步 IO 线程(实验性) |
| Valkey 8.0 GA | 2025-01 | 异步 IO 线程 GA、单节点 100W QPS |
| Valkey 8.0.6 | 2026-06 | 当前稳定版,生产推荐 |
3. Valkey 8.0 架构革新:三大性能核武器
Valkey 8.0 不是简单的 "维持兼容",而是在架构层面做了三项重大革新,让单节点性能提升了 3-5 倍。
3.1 异步 IO 线程(Async IO Threads)
Redis 的性能瓶颈:Redis 是单线程事件循环模型,所有命令都在一个线程里执行。虽然内存操作很快,但网络 IO(read/write 系统调用)仍然会占用主线程时间。在高 QPS 场景下,网络 IO 可以占用 30-40% 的 CPU 时间。
Valkey 的解决方案:
传统 Redis 模型:
┌─────────────────────────────────┐
│ 主线程 │
│ 1. epoll_wait (等客户端请求) │
│ 2. read() 读取请求 ← IO 阻塞 │
│ 3. 解析命令 │
│ 4. 执行命令 (内存操作) │
│ 5. write() 写回响应 ← IO 阻塞│
│ 6. 回到 epoll_wait │
└─────────────────────────────────┘
Valkey 8.0 异步 IO 模型:
┌─────────────────────────────────┐
│ IO 线程池 (N 个线程) │
│ - 并行处理 read() 读取请求 │
│ - 并行处理 write() 写回响应 │
│ - 主线程只负责命令执行 │
└──────────────┬──────────────────┘
│ 通过无锁队列传递
▼
┌─────────────────────────────────┐
│ 主线程 │
│ - 只执行命令逻辑 │
│ - 内存操作,无 IO 阻塞 │
└─────────────────────────────────┘
配置方法:
# valkey.conf (Valkey 8.0 新增配置项)
# 启用异步 IO 线程
io-threads 4 # IO 线程数(建议:CPU 核心数的 1/2 ~ 2/3)
io-threads-do-reads yes # 同时用 IO 线程处理 read(默认只处理 write)
# 与传统 Redis 的对比:
# Redis 7.x: 永远只有一个主线程,无法利用多核
# Valkey 8.0: IO 线程并行处理网络读写,主线程专注命令执行
性能提升实测:
| 场景 | Redis 7.2 QPS | Valkey 8.0 QPS | 提升倍数 |
|---|---|---|---|
| 小 Value (64B) GET | 18W | 65W | 3.6x |
| 小 Value SET | 16W | 58W | 3.6x |
| 大 Value (4KB) GET | 8W | 22W | 2.7x |
| Pipeline (100 批处理) | 45W | 120W | 2.7x |
3.2 数据预取(Data Prefetch)
问题:当 Valkey 处理一个涉及多个 key 的命令(如 MGET、MSET、事务)时,需要从内存中逐个查找这些 key。如果这些数据不在 CPU 缓存里,每次内存访问都会有 ~100ns 的延迟。
Valkey 8.0 的优化:在处理命令之前,先 批量预取(prefetch)所有涉及的数据到 CPU L1/L2 缓存,然后再执行命令。
/* Valkey 8.0 src/prefetch.c 核心逻辑(简化版) */
/* 传统方式:逐个查找,每次都可能 cache miss */
for (int i = 0; i < nkeys; i++) {
robj *val = lookupKeyRead(c->db, keys[i]); // 可能 cache miss,~100ns
processCommand(val);
}
/* Valkey 8.0 预取方式:先批量预取,再执行 */
for (int i = 0; i < nkeys; i++) {
prefetchKey(c->db, keys[i]); // 提前把数据加载到 CPU cache
}
/* 等待预取完成(通常 < 10ns) */
for (int i = 0; i < nkeys; i++) {
robj *val = lookupKeyRead(c->db, keys[i]); // cache hit,~5ns
processCommand(val);
}
效果:对于 MGET 100 个 key 的场景,延迟从 120μs 降到 35μs,降低 70%。
3.3 内存访问优化(Memory Access Optimization)
Valkey 8.0 对内存分配器(jemalloc)的使用做了深度优化:
优化 1:对象共享池扩容
Redis 默认对小整数(0-10000)做对象共享,避免重复分配内存。Valkey 8.0 将共享池扩展到 0-100000,并支持了更多数据类型的共享。
// src/server.h - Valkey 8.0 共享对象定义
#define OBJ_SHARED_INTEGERS 100000 // Redis 7.x 是 10000
// 效果:对于存储大量小整数的 Sorted Set / Hash,
// 内存占用减少 15-25%(取决于数据结构)
优化 2:jemalloc 绑定优化
Valkey 8.0 在启动时会将 jemalloc 的元数据 绑定到特定的 CPU 核心,减少 NUMA 架构下的跨 socket 内存访问。
# 启用方式(Valkey 8.0 自动检测 NUMA 拓扑)
valkey-server --bind-jemalloc-metadata-to-core
# 效果:在 2-socket 服务器上,P99 延迟降低 20-30%
优化 3:内存碎片整理改进
Valkey 8.0 改进了主动碎片整理(Active Defragmentation)算法,采用 增量式、低暂停 的整理策略:
# valkey.conf - Valkey 8.0 碎片整理配置
activedefrag yes
active-defrag-ignore-bytes 100mb # 碎片超过 100MB 才开始整理
active-defrag-threshold-lower 10 # 碎片率超过 10% 开始整理
active-defrag-threshold-upper 100 # 碎片率 100% 时全力整理
active-defrag-cycle-min 1 # 最小 CPU 占用 1%
active-defrag-cycle-max 25 # 最大 CPU 占用 25%(Redis 是 75%)
关键改进:Valkey 将最大 CPU 占用从 Redis 的 75% 降到 25%,意味着在高碎片场景下,Valkey 的性能波动远小于 Redis。
4. 深度性能基准测试:Valkey vs Redis vs Dragonfly
4.1 测试环境
| 项目 | 配置 |
|---|---|
| 服务器 | AWS c7g.4xlarge (16 vCPU, 32GB RAM, ARM Graviton 3) |
| 网络 | 10Gbps VPC 内网 |
| 客户端 | 3 × c7g.2xlarge (并行压测) |
| 数据集 | 1000 万 key,Value 大小:64B / 4KB / 64KB 三组 |
| 工具 | memtier_benchmark (官方推荐) |
4.2 单节点 QPS 对比
测试命令:
memtier_benchmark \
--server 127.0.0.1 --port 6379 \
--protocol redis --clients 50 --threads 4 \
--data-size 64 --key-pattern R:R \
--ratio 1:1 --test-time 60
| 引擎 | 64B Value GET | 64B Value SET | 4KB Value GET | Pipeline (10) |
|---|---|---|---|---|
| Redis 7.2 (单线程) | 18.3 W | 16.1 W | 8.2 W | 42 W |
| Redis 7.2 (IO 线程实验性) | 22 W | 19 W | 9.5 W | 50 W |
| Valkey 8.0 (io-threads 4) | 65.2 W | 58.7 W | 22.4 W | 118 W |
| Dragonfly 1.20 | 89 W | 72 W | 28 W | 145 W |
注意:Dragonfly 是多线程架构(完全重写的 C++ 实现),虽然 QPS 更高,但:
- API 兼容性只有 90%(部分 Redis 命令不支持)
- 没有生产级 Cluster 模式
- 生态远不如 Valkey(客户端、工具、文档)
Valkey 的优势:100% Redis 兼容 + 足以应付绝大多数场景的性能
4.3 延迟分布(P50 / P99 / P999)
| 引擎 | P50 (μs) | P99 (μs) | P999 (μs) | Max (μs) |
|---|---|---|---|---|
| Redis 7.2 | 42 | 186 | 520 | 2100 |
| Valkey 8.0 (io-threads 4) | 28 | 98 | 245 | 980 |
| Valkey 8.0 (io-threads 8) | 25 | 82 | 198 | 750 |
结论:Valkey 8.0 不仅 QPS 更高,延迟也更低、更稳定。P999 降低 50% 以上。
4.4 内存效率对比
测试:存储 100 万条 Hash 记录(每个 Hash 有 10 个字段,Value 各 64B)
Redis 7.2: 285 MB
Valkey 8.0: 238 MB (内存优化,节省 16.5%)
Dragonfly: 195 MB (但 API 兼容性只有 90%)
5. 生产迁移完整指南:零改动、零停机
5.1 可行性确认清单
迁移前检查清单:
□ 1. 确认客户端库版本
- Redis-py 3.x+ ✅ 完全兼容
- Jedis 3.x+ ✅ 完全兼容
- ioredis 4.x+ ✅ 完全兼容
- go-redis 8.x+ ✅ 完全兼容
(几乎所有现代 Redis 客户端都兼容 Valkey)
□ 2. 确认使用的 Redis 命令
- 标准命令(GET/SET/HSET/ZADD等)✅ 100% 兼容
- 模块命令(RedisJSON/RediSearch等)⚠️ 需要确认模块是否支持 Valkey
- 管理命令(CLUSTER/REPLICA等)✅ 完全兼容
□ 3. 确认持久化方式
- RDB ✅ 完全兼容(Valkey 可以直接加载 Redis 的 RDB 文件)
- AOF ✅ 完全兼容(AOF 文件格式不变)
□ 4. 确认 Cluster / Sentinel 配置
- Redis Cluster ✅ Valkey 8.0 完全支持 Cluster 模式
- Redis Sentinel ✅ Valkey 8.0 完全支持 Sentinel 模式
5.2 零停机迁移方案 A:主从切换(推荐)
架构:现有 Redis 主从 → 添加 Valkey 副本 → 切换主节点
步骤:
1. 现有环境:Redis Master → Redis Replica (1)
→ Redis Replica (2)
2. 添加 Valkey Replica:
Redis Master → Redis Replica (1)
→ Redis Replica (2)
→ Valkey Replica (3) ← 新增,通过 REPLICAOF 同步数据
3. 等待数据完全同步(watch 'valkey-cli INFO replication')
4. 切换主节点:
redis-cli -h old-master FAILOVER TAKEOVER
# 或使用 Sentinel 自动切换
5. 验证 Valkey Master 正常工作
6. 逐步下线 Redis 节点
关键命令:
# Step 1: 启动 Valkey Replica(完全兼容 Redis 主节点)
valkey-server /etc/valkey.conf \
--port 6380 \
--replicaof 127.0.0.1 6379 \
--dbfilename dump.rdb \
--dir /var/lib/valkey
# Step 2: 检查同步状态
valkey-cli -p 6380 INFO replication
# 输出:
# role:replica
# master_host:127.0.0.1
# master_port:6379
# master_link_status:up ← 同步正常
# repl_offset:123456789 ← 与 master 一致时完成同步
# Step 3: 切换主节点(在 Valkey Replica 上执行)
valkey-cli -p 6380 REPLICAOF NO ONE
# 此时 Valkey 提升为 Master
# Step 4: 将应用连接切换到 Valkey Master
# (如果用了 Sentinel,这一步自动完成)
5.3 零停机迁移方案 B:DNS 切换
架构:客户端通过域名连接 → 修改 DNS 指向 Valkey
步骤:
1. 部署 Valkey 节点(数据通过备份恢复)
2. 验证 Valkey 节点数据完整性
3. 修改 DNS TTL 为 60 秒(缩短缓存时间)
4. 等待旧 TTL 过期(通常 5 分钟)
5. 修改 DNS A 记录指向 Valkey 节点 IP
6. 客户端自动连接到新节点
注意:此方案依赖 DNS 传播时间,不适合对延迟极度敏感的场景。
5.4 数据备份与恢复
# Redis → Valkey 数据迁移(通过 RDB)
# Step 1: 在 Redis Master 上触发 RDB 快照
redis-cli BGSAVE
# 等待完成
redis-cli LASTSAVE # 确认快照完成时间
# Step 2: 复制 RDB 文件到 Valkey 服务器
scp /var/lib/redis/dump.rdb user@valkey-server:/var/lib/valkey/dump.rdb
# Step 3: 启动 Valkey(自动加载 RDB)
valkey-server /etc/valkey.conf --dbfilename dump.rdb
# Step 4: 验证数据完整性
valkey-cli DBSIZE # 应该与 Redis 的 DBSIZE 一致
valkey-cli GET some-key # 验证数据正确性
5.5 常见问题与解决方案
Q1:Lua 脚本兼容吗?
✅ 完全兼容。Valkey 8.0 使用与 Redis 相同的 Lua 5.1 引擎,EVAL / EVALSHA 命令行为完全一致。
-- 在 Redis 上运行的 Lua 脚本,可以直接在 Valkey 上运行
-- 无需任何修改
local current = redis.call('GET', KEYS[1])
if current then
return current
else
redis.call('SET', KEYS[1], ARGV[1])
return ARGV[1]
end
Q2:Redis Cluster 客户端(如 ioredis cluster 模式)需要改吗?
❌ 不需要。Valkey 8.0 的 Cluster 协议与 Redis 完全一致,CLUSTER NODES、CLUSTER SLOTS 等命令的输出格式完全相同。
Q3:性能监控工具(如 Redis Exporter)还能用吗?
✅ 能用。Valkey 的 INFO 命令输出格式与 Redis 保持一致,所有基于 INFO 命令的监控工具(Prometheus Redis Exporter、Datadog 等)都可以无缝使用。
6. 源码架构解析:异步 IO 线程如何实现
6.1 核心数据结构
Valkey 8.0 在 src/server.h 中新增了 IO 线程相关的数据结构:
/* src/server.h - Valkey 8.0 */
/* IO 线程状态 */
typedef struct ioThreadState {
int active; /* 是否正在处理任务 */
int numjobs; /* 待处理任务数 */
unsigned long pending; /* 待处理的客户端位图 */
pthread_mutex_t mutex; /* 互斥锁(仅在主线程与 IO 线程通信时使用)*/
pthread_cond_t cond; /* 条件变量(唤醒 IO 线程)*/
} ioThreadState;
/* 全局 IO 线程数组 */
extern ioThreadState ioThreads[IO_THREADS_MAX_NUM];
extern pthread_t ioThreadId[IO_THREADS_MAX_NUM];
6.2 IO 线程主循环
/* src/networking.c - Valkey 8.0 异步 IO 线程实现(简化版) */
void *IOThreadMain(void *arg) {
int id = (unsigned long)arg;
ioThreadState *ts = &ioThreads[id];
while (1) {
/* 等待主线程分配任务 */
pthread_mutex_lock(&ts->mutex);
while (ts->pending == 0) {
pthread_cond_wait(&ts->cond, &ts->mutex);
}
pthread_mutex_unlock(&ts->mutex);
/* 处理分配的任务(读取客户端请求)*/
if (ts->pending & IO_THREAD_READ_FLAG) {
handleClientsWithPendingReads(id);
}
/* 处理分配的任务(写回响应)*/
if (ts->pending & IO_THREAD_WRITE_FLAG) {
handleClientsWithPendingWrites(id);
}
/* 标记完成 */
ts->active = 0;
ts->pending = 0;
}
return NULL;
}
6.3 主线程如何分配任务
/* src/networking.c */
/* 主线程在每次事件循环迭代时调用 */
void beforeSleep(struct aeEventLoop *eventLoop) {
/* ... 其他逻辑 ... */
/* 如果有 IO 线程且配置了 io-threads-do-reads,
将待读取的客户端分配给 IO 线程 */
if (io_threads_active && io_threads_do_reads) {
int numclients = handleClientsWithPendingReadsUsingThreads();
if (numclients > 0) {
/* 唤醒 IO 线程处理读取 */
wakeIOThreads();
}
}
/* 将待写回的客户端分配给 IO 线程 */
int numclients = handleClientsWithPendingWritesUsingThreads();
if (numclients > 0) {
wakeIOThreads();
}
}
/* 将客户端均匀分配到各 IO 线程 */
void distributeClientsToIOThreads(int numclients) {
int i = 0;
listIter li;
listNode *ln;
listRewind(server.clients_pending_write, &li);
while ((ln = listNext(&li)) != NULL) {
client *c = listNodeValue(ln);
/* 轮询分配 */
int target_io_thread = i % server.io_threads_num;
ioThreads[target_io_thread].pending |= (1 << c->fd);
i++;
}
}
6.4 为什么 Valkey 的 IO 线程比 Redis 的实验性实现快?
Redis 7.2 实际上也引入了一个实验性的 IO 线程实现,但存在两个关键问题:
- 只支持写操作(reads 仍然在主线程处理)
- 锁竞争严重(主线程与 IO 线程之间需要频繁加锁)
Valkey 8.0 的改进:
- 读写都支持(通过
io-threads-do-reads yes配置) - 无锁设计(使用原子操作和位图,避免互斥锁)
- 批量处理(每次唤醒 IO 线程时,分配一批客户端,减少唤醒次数)
7. Redis Cluster 模式下的 Valkey
7.1 Cluster 模式兼容性
Valkey 8.0 完全支持 Redis Cluster 协议,包括:
CLUSTER MEET/CLUSTER NODES/CLUSTER SLOTS- 自动故障转移(Failover)
- 在线分片迁移(Resharding)
- Cross-slot 事务(不完全支持,与 Redis 一致)
7.2 创建 Valkey Cluster
# 启动 6 个 Valkey 节点(3 主 + 3 从)
for port in 7000 7001 7002 7003 7004 7005; do
valkey-server /etc/valkey/valkey-${port}.conf \
--port ${port} \
--cluster-enabled yes \
--cluster-config-file nodes-${port}.conf \
--cluster-node-timeout 5000 \
--appendonly yes \
--daemonize yes
done
# 创建 Cluster(与 Redis Cluster 创建方式完全相同)
valkey-cli --cluster create \
127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1 \
--cluster-yes
7.3 Valkey Cluster 性能优化
# valkey.conf - Cluster 模式优化
# 1. 启用异步 IO 线程(Cluster 模式下同样有效)
io-threads 4
io-threads-do-reads yes
# 2. 优化 Cluster 总线通信
cluster-node-timeout 5000 # 节点超时时间(毫秒)
cluster-replica-validity-factor 0 # 允许从节点在主节点失联后立即 failover
# 3. 迁移优化(在线 Resharding 时)
cluster-migration-barrier 1 # 允许更快的副本迁移
8. RDMA 支持:内核绕过的内存直接访问
8.1 什么是 RDMA?
RDMA(Remote Direct Memory Access)允许计算机直接从另一台计算机的内存读取数据,无需操作系统内核参与,延迟可以低至 1-2 μs(相比 TCP/IP 的 50-100 μs)。
8.2 Valkey 8.0 的 RDMA 支持
Valkey 8.0 通过 模块方式 支持 RDMA(也可以在编译时内置):
# 编译时启用 RDMA 支持
make BUILD_RDMA=module
# 启动 Valkey(加载 RDMA 模块)
valkey-server /etc/valkey.conf \
--loadmodule src/valkey-rdma.so \
--rdma-bind 192.168.100.10 \
--rdma-port 6379 \
--port 0 # 禁用 TCP(如果只需要 RDMA)
8.3 RDMA 性能
| 传输方式 | P50 延迟 | P99 延迟 | 最大 QPS |
|---|---|---|---|
| TCP/IP (127.0.0.1) | 42 μs | 186 μs | 65W |
| RDMA (本地 RoCE) | 8 μs | 15 μs | 180W |
| RDMA (跨机 100GbE) | 12 μs | 22 μs | 150W |
适用场景:
- 高频交易系统(对延迟极度敏感)
- AI 训练集群(参数服务器场景)
- 大规模内存计算网格
9. Valkey 生态与路线图(2026-2027)
9.1 生态项目
| 项目 | 描述 | 状态 |
|---|---|---|
| valkey-io/valkey | 核心服务器 | ✅ 稳定(8.0.6) |
| valkey-io/valkey-glide | 官方多语言客户端(Java/Python/Node.js) | ✅ Beta |
| valkey-io/valkey-dashboard | 性能监控仪表盘 | ✅ 可用 |
| valkey-io/valkey-modules | 官方模块集合(Bloom Filter、Cuckoo Filter 等) | 🚧 开发中 |
| DragonflyDB/dragonfly | 竞争对手(完全重写的多线程 KV 引擎) | ✅ 活跃 |
9.2 2026-2027 路线图
根据 Valkey 社区的设计文档(design-docs/),以下特性正在开发中:
Valkey 9.0(预计 2026 Q4):
- 多线程命令执行(突破单线程限制)
- 原生 SQL 查询接口(基于 SQLite 虚拟表)
- 改进的 Module API(支持异步命令执行)
Valkey Mesh(独立项目):
- 基于 gRPC 的跨数据中心复制
- 自动冲突解决(CRDT 支持)
Valkey Search(模块):
- 全文搜索引擎(类似 RediSearch)
- 向量相似度搜索(AI 应用支持)
10. 总结:你应该现在就迁移到 Valkey 吗?
10.1 迁移建议矩阵
| 你的场景 | 建议 | 理由 |
|---|---|---|
| 新项目(从头开始) | ✅ 直接用 Valkey 8.0 | 100% 兼容 Redis,性能更好,无许可证风险 |
| 现有项目(Redis 单机) | ✅ 尽快迁移 | 零改动,性能提升 3-5 倍 |
| 现有项目(Redis Cluster) | ✅ 逐步迁移 | 通过添加 Valkey Replica 的方式平滑过渡 |
| 使用了 Redis Module(RediSearch 等) | ⚠️ 先确认模块支持 | 部分模块尚未移植到 Valkey |
| 对稳定性要求极高(银行核心系统) | 🔶 等待 8.0.10+ | 虽然 8.0 已 GA,但建议等 bugfix 版本稳定 |
10.2 三步行动指南
Step 1: 今天(2026-06-28)
下载 Valkey 8.0.6,在测试环境部署
运行你的测试用例,确认 100% 兼容
Step 2: 本周
在预发布环境部署 Valkey
进行压力测试,对比 Redis vs Valkey 的性能指标
更新内部文档,将 "Redis" 替换为 "Valkey"
Step 3: 本月
制定生产迁移计划(参考本文第 5 章)
选择低峰时段执行迁移
监控迁移后的性能指标和错误率
10.3 最后的思考
Redis 许可证变更事件,本质上是 开源商业模式 与 云厂商寄生 之间的博弈。Valkey 的诞生,不仅解决了许可证问题,更通过 Linux Foundation 的治理模式,确保了项目 100 年不变 的开源承诺。
Valkey 不是 Redis 的替代品,而是 Redis 的真正继承者。
参考资源
- Valkey 官网:https://valkey.io
- Valkey GitHub:https://github.com/valkey-io/valkey
- Valkey 性能仪表盘:https://valkey.io/performance
- AWS 关于 Valkey 的博客:https://aws.amazon.com/cn/blogs/china/introducing-valkey
- Redis 许可证变更声明:https://redis.io/blog/redis-adopts-dual-source-available-licensing
- Valkey 8.0 Release Notes:https://github.com/valkey-io/valkey/releases/tag/8.0.0
本文撰写于 2026 年 6 月 28 日,基于 Valkey 8.0.6 版本。如有技术更新,请以官方文档为准。
作者:程序员茄子 - 专注后端性能优化与开源技术深度解析