*Redis 升级指南
原文:https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/ 翻译整理:Kimi
本文介绍在不同平台上升级 Redis 的方法,以及升级前的准备工作和注意事项。
*升级前准备
*1. 备份数据
无论使用何种升级方式,升级前必须备份数据!
# 触发 RDB 保存
redis-cli SAVE
# 备份 RDB 文件
cp /var/lib/redis/dump.rdb /backup/dump.rdb.$(date +%Y%m%d_%H%M%S)
# 备份 AOF 文件(如果启用)
cp /var/lib/redis/appendonly.aof /backup/appendonly.aof.$(date +%Y%m%d_%H%M%S)
# 备份配置文件
cp /etc/redis/redis.conf /backup/redis.conf.$(date +%Y%m%d_%H%M%S)
*2. 检查当前版本
redis-cli INFO server | grep redis_version
redis-server --version
*3. 查阅版本说明
- 查看 Redis 发布说明 了解新版本的变化
- 注意破坏性变更(Breaking Changes)
- 确认当前使用的功能在新版本中仍然支持
*4. 测试环境验证
强烈建议先在测试环境验证升级过程:
- 搭建与生产环境相同的测试实例
- 使用生产数据备份恢复测试实例
- 执行升级操作
- 验证应用兼容性
- 运行性能基准测试
*版本兼容性说明
| 升级路径 | 兼容性 | 说明 |
|---|---|---|
| 同一大版本的小版本升级 | ✅ 完全兼容 | 如 7.2.0 → 7.2.5 |
| 大版本升级(如 6.x → 7.x) | ⚠️ 需验证 | 可能有配置变更或行为差异 |
| 大版本升级(如 7.x → 8.x) | ⚠️ 需验证 | 可能有破坏性变更 |
| 降级 | ❌ 不推荐 | 数据格式可能不兼容 |
*方法一:APT 升级(Ubuntu/Debian)
*标准升级
# 更新包索引
sudo apt-get update
# 查看可用版本
apt policy redis
# 升级 Redis
sudo apt-get install --only-upgrade redis
# 重启服务
sudo systemctl restart redis
*升级到特定版本
# 查看可用版本
apt-cache policy redis | grep Candidate
# 安装指定版本
sudo apt-get install redis=6:8.0.0-1rl1~noble1
# 固定版本防止自动升级
sudo apt-mark hold redis
*解除版本固定
sudo apt-mark unhold redis
*方法二:RPM 升级(Rocky/AlmaLinux)
# 更新包索引
sudo yum check-update
# 升级 Redis
sudo yum update redis
# 或仅升级 Redis
sudo yum update redis --enablerepo=Redis
# 重启服务
sudo systemctl restart redis
*升级到特定版本
# 查看可用版本
sudo yum --showduplicates list redis
# 安装指定版本
sudo yum install redis-8.0.0-1.el9.x86_64
*方法三:源码升级
*1. 停止 Redis
# 优雅关闭(会触发保存)
redis-cli SHUTDOWN
# 或强制关闭(如果优雅关闭失败)
sudo systemctl stop redis
*2. 备份并清理旧版本
# 备份旧版本二进制文件
sudo cp /usr/local/bin/redis-server /usr/local/bin/redis-server.old
sudo cp /usr/local/bin/redis-cli /usr/local/bin/redis-cli.old
# 记录旧版本信息
redis-server --version > /backup/redis-version-old.txt
*3. 下载并编译新版本
# 下载新版本
cd /usr/local/src
wget https://download.redis.io/redis-8.0.0.tar.gz
tar -xzvf redis-8.0.0.tar.gz
cd redis-8.0.0
# 编译
make -j$(nproc)
# 运行测试(可选但推荐)
make test
# 安装
sudo make install
*4. 更新配置
检查新版本是否有新增或变更的配置项:
# 对比新旧配置文件
diff /usr/local/src/redis-8.0.0/redis.conf /etc/redis/redis.conf
# 或使用 meld/vimdiff 等工具可视化对比
meld /usr/local/src/redis-8.0.0/redis.conf /etc/redis/redis.conf
常见需要关注的配置变更:
- 新增的安全相关配置
- 默认值的变更
- 已弃用的配置项
*5. 启动新版本
sudo systemctl start redis
# 验证版本
redis-server --version
redis-cli INFO server | grep redis_version
# 验证数据完整性
redis-cli DBSIZE
redis-cli INFO keyspace
*6. 清理旧版本
确认新版本运行正常后:
# 删除旧版本源码
sudo rm -rf /usr/local/src/redis-oldversion
# 删除旧版本备份(保留一段时间后再删除)
# sudo rm /usr/local/bin/redis-server.old
*方法四:Docker 升级
*1. 备份数据
# 如果使用了数据卷,直接备份卷
docker run --rm -v redis-data:/data -v $(pwd):/backup alpine tar czf /backup/redis-backup.tar.gz -C /data .
# 或使用 docker cp
docker cp redis:/data ./redis-backup
*2. 拉取新版本镜像
docker pull redis:8.0
*3. 停止并删除旧容器
docker stop redis
docker rm redis
*4. 启动新容器
docker run -d --name redis -p 6379:6379 -v redis-data:/data redis:8.0
*5. 验证
docker exec redis redis-cli INFO server | grep redis_version
docker exec redis redis-cli DBSIZE
*使用 Docker Compose 升级
# 修改 docker-compose.yml 中的镜像版本
# 例如:image: redis:8.0
# 拉取新镜像
docker-compose pull
# 重新创建容器
docker-compose up -d
# 验证
docker-compose exec redis redis-cli INFO server | grep redis_version
*方法五:Homebrew 升级(macOS)
# 更新 Homebrew
brew update
# 升级 Redis
brew upgrade redis
# 重启服务
brew services restart redis
# 验证版本
redis-server --version
*高可用环境的滚动升级
对于使用 Sentinel 或 Cluster 的生产环境,应采用滚动升级策略以最小化停机时间。
*Sentinel 环境滚动升级
假设架构:1 主(M)+ 2 从(R1, R2)+ 3 Sentinel
1. 升级副本节点(逐个进行)
- 停止 R1 的 Redis 服务
- 升级 R1 的 Redis 版本
- 启动 R1,等待与主节点同步完成
- 对 R2 重复上述步骤
2. 手动故障转移
- 在 R1 上执行:redis-cli CLUSTER FAILOVER(Sentinel 环境下使用 SENTINEL FAILOVER)
- 或等待 Sentinel 自动故障转移
- 确认 R1 成为新主节点
3. 升级旧主节点(现在的副本)
- 停止旧 M
- 升级版本
- 启动,等待同步
4. 如需,再次故障转移恢复原始拓扑
*Cluster 环境滚动升级
假设架构:3 主 + 3 从
1. 升级所有副本节点(逐个进行)
- 停止副本的 Redis
- 升级版本
- 启动副本
- 等待集群状态恢复(cluster_state:ok)
- 对下一个副本重复
2. 升级主节点(逐个进行)
- 对要升级的主节点执行手动故障转移:
redis-cli CLUSTER FAILOVER
- 等待副本成为新主节点
- 升级旧主节点(现在为副本)
- 启动并等待同步
- 如需,再次故障转移恢复原始角色
- 对下一个主节点重复
注意:Redis Cluster 4.0 在集群总线协议级别与 3.2 不兼容,因此从 3.2 升级到 4.0 需要大规模重启。但 Redis 5 集群总线与 Redis 4 向后兼容。
*升级后验证清单
- 确认 Redis 版本正确:
redis-cli INFO server | grep redis_version - 检查服务状态:
systemctl status redis - 验证数据完整性:
redis-cli DBSIZE、redis-cli INFO keyspace - 测试基本操作:
redis-cli ping、redis-cli set test value、redis-cli get test - 检查持久化状态:
redis-cli INFO persistence - 验证复制状态(如有副本):
redis-cli INFO replication - 检查日志是否有错误或警告:
tail -n 100 /var/log/redis/redis-server.log - 运行性能基准测试,对比升级前后的性能
- 验证应用连接正常,业务功能无异常
*回滚方案
如果升级后出现问题,需要快速回滚:
*APT/RPM 回滚
# 查看已安装版本历史
apt-cache policy redis # Ubuntu/Debian
yum history list # Rocky/AlmaLinux
# 降级到旧版本
sudo apt-get install redis=旧版本号
# 或
sudo yum downgrade redis-旧版本号
*源码回滚
# 停止 Redis
sudo systemctl stop redis
# 恢复旧版本二进制文件
sudo cp /usr/local/bin/redis-server.old /usr/local/bin/redis-server
sudo cp /usr/local/bin/redis-cli.old /usr/local/bin/redis-cli
# 恢复旧配置文件
sudo cp /backup/redis.conf.YYYYMMDD /etc/redis/redis.conf
# 启动旧版本
sudo systemctl start redis
*数据回滚
# 停止 Redis
sudo systemctl stop redis
# 恢复备份的 RDB 文件
sudo cp /backup/dump.rdb.YYYYMMDD /var/lib/redis/dump.rdb
sudo chown redis:redis /var/lib/redis/dump.rdb
# 启动 Redis(会自动加载 RDB)
sudo systemctl start redis
*常见问题
*升级后无法启动
- 检查日志:
/var/log/redis/redis-server.log - 检查配置文件兼容性
- 检查权限:
/var/lib/redis、/var/log/redis - 尝试使用默认配置启动:
redis-server /usr/local/src/redis-new/redis.conf
*数据丢失
- 检查是否启用了持久化
- 检查 RDB/AOF 文件是否存在且完整
- 使用
redis-check-rdb和redis-check-aof检查文件 - 从备份恢复
*性能下降
- 检查新版本的默认配置是否有变更
- 对比升级前后的
redis-cli INFO all输出 - 检查系统资源使用(CPU、内存、I/O)
- 考虑调整配置参数
*最佳实践
- 始终先备份:升级前完整备份数据和配置
- 先在测试环境验证:模拟生产环境进行升级测试
- 选择维护窗口:在生产环境低峰期执行升级
- 监控升级过程:实时观察日志和监控指标
- 准备回滚方案:确保能在出现问题时快速恢复
- 逐步升级:高可用环境使用滚动升级,逐个节点进行
- 记录变更:记录升级前后的版本、配置变更和性能数据