编程 Valkey 8.0 深度实战:Redis 许可证风波后的终极归宿——单节点 100W QPS、异步 IO 线程与零痛苦迁移的完整指南(2026)

2026-06-28 13:13:10 +0800 CST views 21

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 的降维打击;并附上生产级迁移指南,让你的系统零改动升级。


目录

  1. 背景:Redis 许可证变更始末
  2. Valkey 是什么?谁在背后?
  3. Valkey 8.0 架构革新:三大性能核武器
  4. 深度性能基准测试:Valkey vs Redis vs Dragonfly
  5. 生产迁移完整指南:零改动、零停机
  6. 源码架构解析:异步 IO 线程如何实现
  7. Redis Cluster 模式下的 Valkey
  8. RDMA 支持:内核绕过的内存直接访问
  9. Valkey 生态与路线图(2026-2027)
  10. 总结:你应该现在就迁移到 Valkey 吗?

1. 背景:Redis 许可证变更始末

1.1 事件时间线

日期事件
2024-03-20Redis Labs 宣布 Redis 7.2.4 起采用 RSALv2 + SSPLv1 双许可证
2024-03-22AWS 宣布 fork Redis,启动 Valkey 项目
2024-05-01Valkey 7.2.5 发布(与 Redis 7.2.4 API 完全兼容)
2024-09-15Valkey 8.0 首个 RC 发布,引入异步 IO 线程
2025-01-10Valkey 8.0 GA 正式发布
2026-06-28Valkey 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 有两个选择:

  1. 向 Redis Ltd. 支付商业授权费(每年估计 5000 万 ~ 1 亿美元)
  2. 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.52024-05与 Redis 7.2.4 完全兼容,bug 修复
Valkey 8.0 RC12024-09引入异步 IO 线程(实验性)
Valkey 8.0 GA2025-01异步 IO 线程 GA、单节点 100W QPS
Valkey 8.0.62026-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 QPSValkey 8.0 QPS提升倍数
小 Value (64B) GET18W65W3.6x
小 Value SET16W58W3.6x
大 Value (4KB) GET8W22W2.7x
Pipeline (100 批处理)45W120W2.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 GET64B Value SET4KB Value GETPipeline (10)
Redis 7.2 (单线程)18.3 W16.1 W8.2 W42 W
Redis 7.2 (IO 线程实验性)22 W19 W9.5 W50 W
Valkey 8.0 (io-threads 4)65.2 W58.7 W22.4 W118 W
Dragonfly 1.2089 W72 W28 W145 W

注意:Dragonfly 是多线程架构(完全重写的 C++ 实现),虽然 QPS 更高,但:

  1. API 兼容性只有 90%(部分 Redis 命令不支持)
  2. 没有生产级 Cluster 模式
  3. 生态远不如 Valkey(客户端、工具、文档)

Valkey 的优势:100% Redis 兼容 + 足以应付绝大多数场景的性能

4.3 延迟分布(P50 / P99 / P999)

引擎P50 (μs)P99 (μs)P999 (μs)Max (μs)
Redis 7.2421865202100
Valkey 8.0 (io-threads 4)2898245980
Valkey 8.0 (io-threads 8)2582198750

结论: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 NODESCLUSTER 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 线程实现,但存在两个关键问题:

  1. 只支持写操作(reads 仍然在主线程处理)
  2. 锁竞争严重(主线程与 IO 线程之间需要频繁加锁)

Valkey 8.0 的改进:

  1. 读写都支持(通过 io-threads-do-reads yes 配置)
  2. 无锁设计(使用原子操作和位图,避免互斥锁)
  3. 批量处理(每次唤醒 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 μs186 μs65W
RDMA (本地 RoCE)8 μs15 μs180W
RDMA (跨机 100GbE)12 μs22 μs150W

适用场景

  • 高频交易系统(对延迟极度敏感)
  • 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/),以下特性正在开发中:

  1. Valkey 9.0(预计 2026 Q4)

    • 多线程命令执行(突破单线程限制)
    • 原生 SQL 查询接口(基于 SQLite 虚拟表)
    • 改进的 Module API(支持异步命令执行)
  2. Valkey Mesh(独立项目)

    • 基于 gRPC 的跨数据中心复制
    • 自动冲突解决(CRDT 支持)
  3. Valkey Search(模块)

    • 全文搜索引擎(类似 RediSearch)
    • 向量相似度搜索(AI 应用支持)

10. 总结:你应该现在就迁移到 Valkey 吗?

10.1 迁移建议矩阵

你的场景建议理由
新项目(从头开始)✅ 直接用 Valkey 8.0100% 兼容 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 版本。如有技术更新,请以官方文档为准。

作者:程序员茄子 - 专注后端性能优化与开源技术深度解析

推荐文章

Vue3中哪些API被废弃了?
2024-11-17 04:17:22 +0800 CST
vue打包后如何进行调试错误
2024-11-17 18:20:37 +0800 CST
JavaScript 异步编程入门
2024-11-19 07:07:43 +0800 CST
api远程把word文件转换为pdf
2024-11-19 03:48:33 +0800 CST
使用 `nohup` 命令的概述及案例
2024-11-18 08:18:36 +0800 CST
程序员茄子在线接单