痛点:Redis 许可证变了,你的基础设施还好吗?
2024 年 Redis 宣布从 BSD 切换到 RSALv2 + SSPLv1 双许可证。对运维团队的影响很直接:
- 云厂商托管服务可能涨价或调整功能(AWS ElastiCache 已开始切换到 Valkey)
- 自建 Redis 如果用在商业产品里,许可证合规性需要法务审查
- 开源生态工具逐步从 Redis 切换到 Valkey 分支
Valkey 是 Linux Foundation 托管的 Redis 7.2 分支,由原 Redis 核心贡献者维护,API 100% 兼容。截至 2026 年,Valkey 8.x 已经是生产就绪状态,AWS ElastiCache、Google Cloud Memorystore 都已支持。
核心问题:怎么把现有 Redis 无缝切换到 Valkey,不影响业务?
方案:基于 RDB/AOF 复制 + 渐进式切流
迁移思路分三步:
- 部署 Valkey 实例,用 Redis 的 RDB 快照恢复数据
- 通过 replication 机制让 Valkey 作为 Redis 的 replica 实时同步
- 切换应用连接串,验证后下线旧 Redis
Valkey 8.x 完全兼容 Redis 7.2 协议和数据格式,客户端库(Jedis、redis-py、ioredis)无需改动。
实操步骤
第 1 步:部署 Valkey 8.x
Docker 方式最快:
# 拉取 Valkey 官方镜像
docker pull valkey/valkey:8
# 启动 Valkey,映射 6380 端口避免和现有 Redis 冲突
docker run -d \
--name valkey-primary \
-p 6380:6379 \
-v /data/valkey:/data \
valkey/valkey:8 \
valkey-server --appendonly yes --maxmemory 4gb --maxmemory-policy allkeys-lru
验证启动:
# 用 redis-cli 或 valkey-cli 都能连
redis-cli -p 6380 ping
# 返回 PONG
redis-cli -p 6380 info server | grep valkey_version
# valkey_version:8.1.1
关键点:Valkey 的 CLI 工具叫 valkey-cli,但 redis-cli 一样能用,协议完全兼容。
第 2 步:数据同步——用 replication 实时追平
方式 A:在线复制(推荐,零停机)
让 Valkey 作为现有 Redis 的 replica:
# 在 Valkey 实例上执行
redis-cli -p 6380 REPLICAOF <redis-master-ip> 6379
# 如果 Redis 有密码
redis-cli -p 6380 CONFIG SET masterauth <redis-password>
检查复制状态:
redis-cli -p 6380 info replication
# role:slave
# master_link_status:up
# master_sync_in_progress:0 ← 全量同步完成
等待 master_repl_offset 追平后进入下一步。
方式 B:离线导入(数据量大、网络受限场景)
# 在 Redis 上生成 RDB 快照
redis-cli -h <redis-ip> BGSAVE
# 拷贝 RDB 文件到 Valkey 数据目录
scp /var/lib/redis/dump.rdb valkey-host:/data/valkey/dump.rdb
# 重启 Valkey 加载数据
docker restart valkey-primary
第 3 步:切流 + 验证
切流前的检查清单:
# 1. 确认数据一致性(对比 key 数量)
redis-cli -p 6379 DBSIZE
redis-cli -p 6380 DBSIZE
# 2. 抽样校验关键 key
redis-cli -p 6379 GET user:session:abc123
redis-cli -p 6380 GET user:session:abc123
# 3. 断开复制关系,Valkey 升级为主节点
redis-cli -p 6380 REPLICAOF NO ONE
切换应用连接:
# 应用侧改动极小,只改连接地址和端口
import redis
# 原来
# r = redis.Redis(host='redis-master', port=6379, password='xxx')
# 改为
r = redis.Redis(host='valkey-primary', port=6380, password='xxx')
# 所有操作完全一致,无需改业务代码
r.set('test_key', 'valkey_works')
print(r.get('test_key')) # b'valkey_works'
渐进切流策略(大流量场景推荐):
# 用 Nginx stream 做 TCP 代理,按权重切流
stream {
upstream redis_backend {
server redis-master:6379 weight=0; # 旧 Redis,权重降为 0
server valkey-primary:6380 weight=10; # Valkey,接管全部流量
}
server {
listen 6379;
proxy_pass redis_backend;
}
}
避坑指南
坑 1:Redis Modules 不兼容
Valkey 不支持 Redis 商业模块(RedisJSON、RediSearch、RedisTimeSeries)。但社区已有替代方案:
| Redis Module | Valkey 替代方案 |
|---|---|
| RedisJSON | Valkey 原生 JSON 支持(8.x 已内置) |
| RediSearch | 使用外部搜索引擎(MeiliSearch/Typesense) |
| RedisTimeSeries | Valkey 8.x 原生 time series 或用 TimescaleDB |
确认方法:
# 检查当前 Redis 是否用了模块
redis-cli MODULE LIST
# 如果返回空列表,迁移无障碍
坑 2:Sentinel / Cluster 拓扑迁移
如果你用的是 Redis Sentinel 或 Cluster 模式:
# Valkey 完全兼容 Sentinel 协议
# 只需要把 sentinel.conf 里的 monitor 指向 Valkey 新实例
sentinel monitor mymaster <valkey-ip> 6380 2
# Cluster 模式:逐节点替换
# 先用 CLUSTER MEET 让 Valkey 节点加入,再 CLUSTER FORGET 旧节点
valkey-cli --cluster add-node <valkey-ip>:6380 <existing-cluster-node>:6379
valkey-cli --cluster reshard <existing-cluster-node>:6379
valkey-cli --cluster del-node <existing-cluster-node>:6379 <old-node-id>
坑 3:监控和告警适配
Prometheus redis_exporter 对 Valkey 完全兼容,但需要注意:
# prometheus.yml - 改 target 地址即可
- job_name: 'valkey'
static_configs:
- targets: ['valkey-primary:6380']
metrics_path: /metrics
# redis_exporter 无需改动,INFO 命令输出格式一致
Grafana Dashboard 中部分面板可能显示 redis_version 为空,需要改用 valkey_version 字段:
# 旧查询
redis_info{key="redis_version"}
# 改为
redis_info{key="valkey_version"}
Valkey 8.x 相比 Redis 7.2 的新特性
迁移不只是为了合规,Valkey 自身也在快速演进:
| 特性 | 说明 |
|---|---|
| 多线程 IO | 默认启用 io-threads,高并发场景吞吐提升 30%+ |
| RDMA 支持 | 数据中心内 Valkey 节点间通信延迟降至微秒级 |
| Slot 级迁移优化 | Cluster resharding 速度提升 5 倍 |
| 原生 JSON / Vector | 内置 JSON 操作和向量搜索,不依赖外部模块 |
| 更低内存碎片 | 改进的 jemalloc 配置 + 主动碎片整理策略 |
总结
| 维度 | 结论 |
|---|---|
| 兼容性 | Valkey 8.x 对 Redis 7.2 API 100% 兼容,客户端零改动 |
| 迁移方式 | 推荐在线 REPLICAOF 方式,实时同步 + 秒级切换 |
| 风险点 | 主要看 Redis Modules 依赖,无模块则无风险 |
| 收益 | 许可证合规 + 性能提升 + 云厂商原生支持 + 活跃社区 |
一句话:如果你现在用的是开源 Redis 7.x,迁移到 Valkey 的成本极低,收益明确。越早切越主动。