Redis 7.0 升级这事儿,说简单不简单,说难吧,只要提前摸清那几个关键坑,就能少走弯路。升级前最好对照下面的改动清单,把自己的配置文件逐条检查一遍。

redis.conf 中被移除或重命名的参数必须手动处理
从 Redis 7.0 开始,sla veof 就正式退役了,接班的是 replicaof。如果旧配置还留着 sla veof,新版 redis-server 启动时会直接报错退出,不是警告,是 fatal error。类似这样:Invalid argument 'sla veof' in redis.conf。
其他值得留意的变动还有:
notify-keyspace-events的默认值从空字符串变成了显式空"",但行为没变,可改可不改。maxmemory-policy新增了allkeys-lfu这类策略。旧版配置如果提前用了新策略名,旧版里会静默忽略;升级后务必确认新策略是否生效。cluster-require-full-coverage的默认值在 7.0+ 变成了yes,而 6.x 默认是no。如果集群容忍部分 slot 不可用,必须显式设为no。
配置项语义变更容易被忽略
有些参数名字没变,但含义或取值范围悄悄改了。比如 cluster-node-timeout,单位还是毫秒,但 7.0+ 对超时判断逻辑更严格——如果网络抖动导致 PING 延迟偶尔超过该值,节点可能被误判为 fail,进而触发不必要的故障转移。
再来看看 tcp-backlog:Redis 7 要求系统内核参数 net.core.somaxconn 至少等于该值,否则启动时只给个 warning,但连接拒绝率会明显上升。检查方法很简单:
sysctl net.core.somaxconn
如果输出小于你配置的 tcp-backlog,必须同步调大内核参数。
集群配置文件 nodes-*.conf 不能手动编辑
Redis 启动后自动生成并维护 nodes-7000.conf 这类文件,里面存的是节点 ID、IP、端口、角色、状态等运行时信息。升级时绝对不要用文本编辑器打开修改它——哪怕只是改个 IP 或注释掉一行,都会导致集群握手失败、节点无法加入、CLUSTER NODES 输出异常。
正确的做法是:
- 停掉旧节点前,先执行
redis-cli -p 7000 CLUSTER FORGET清理已下线节点(如有)。 - 升级后首次启动,让新版本自动重建该文件;它会读取
redis.conf中的bind、port、cluster-enabled yes等配置,重新生成合法内容。 - 若需迁移节点 IP,应先用
CLUSTER MEET加入新地址,再用CLUSTER FORGET移除旧地址,而不是硬改配置文件。
ACL 配置在 6→7 升级中需额外校验
Redis 6 引入了 ACL,但默认仍允许空密码登录(requirepass 优先级高于 ACL)。到了 Redis 7,ACL 成为强制路径——即使没配 ACL LOAD,只要启用了 requirepass,所有连接都走默认用户 default,且该用户默认无权限执行 CONFIG、CLUSTER 等管理命令。
典型现象:升级后 redis-cli -a pwd CONFIG GET dir 返回 (error) NOPERM this user has no permissions to run the 'config' command。
解决方法只有两个:
- 在
redis.conf中显式提升 default 用户权限:user default on >mypass ~* &@all - 或改用带权限的专用用户,通过
ACL SETUSER创建并持久化到ACLFILE
需要注意的是:user default 行必须放在 redis.conf 末尾,否则会被后续 ACL LOAD 覆盖。
