在维护Redis实例的过程中,经常会遇到需要调整配置的情况:内存不够用了要调大maxmemory、内存淘汰策略不合适要换成allkeys-lru、需要临时开启AOF持久化等等。传统做法是修改redis.conf然后重启实例,但在生产环境中重启意味着缓存全部失效、业务请求瞬间打到数据库上,风险很高。好在Redis提供了CONFIG SET命令,允许我们在运行时动态修改绝大部分配置参数,修改后立即生效,完全不需要重启服务。

CONFIG SET基本语法与使用方法
CONFIG SET命令的语法非常简单,格式为CONFIG SET parameter value。执行成功后返回OK,配置立即生效。比如最常见的内存限制调整:
redis-cli CONFIG SET maxmemory 4gb redis-cli CONFIG SET maxmemory-policy allkeys-lru redis-cli CONFIG SET maxmemory 2147483648 # 也可以直接用字节数
查看当前配置对应的值,可以使用CONFIG GET命令,它支持通配符匹配,非常方便:
redis-cli CONFIG GET maxmemory redis-cli CONFIG GET maxmemory* # 匹配 maxmemory 和 maxmemory-policy redis-cli CONFIG GET * # 查看全部运行时配置
需要注意的是,value的写法要和redis.conf中的写法保持一致。比如时间类参数支持秒、毫秒、微秒等单位,字节数支持kb、mb、gb等单位,字符串类型参数直接写值即可。如果不确定某个参数当前的值,先用CONFIG GET确认一下再修改,是更稳妥的习惯。
常用的动态修改场景详解
调整内存限制与淘汰策略
当Redis内存使用逼近上限时,线上往往会出现写入报错或者频繁淘汰的情况。这时候可以通过CONFIG SET临时调整策略。比如把noeviction改成allkeys-lru,让Redis在内存满时自动淘汰最久未使用的键,避免业务写入直接失败。调整后建议持续观察info memory的输出,确认淘汰行为符合预期。
redis-cli CONFIG SET maxmemory 8gb redis-cli CONFIG SET maxmemory-policy allkeys-lru redis-cli INFO memory | grep -E "used_memory_human|maxmemory_human"
在线开启AOF持久化
Redis 2.2之后的版本支持在不重启的情况下开启或关闭AOF,这是非常实用的功能。开启时Redis会根据当前的RDB快照生成AOF基础内容,后续的写命令会以追加的方式写入AOF文件:
redis-cli CONFIG SET appendonly yes # 在线开启AOF redis-cli CONFIG SET appendfsync everysec # 每秒刷盘一次 redis-cli CONFIG SET appendonly no # 关闭AOF(谨慎操作)
开启AOF的过程中会有后台线程执行重写操作,期间如果数据量很大,磁盘IO会有一定压力,建议在业务低峰期操作。
修改慢查询与密码配置
排查性能问题时,经常需要动态调整慢查询阈值,或者临时放大客户端连接数限制:
redis-cli CONFIG SET slowlog-log-slower-than 10000 # 阈值10毫秒 redis-cli CONFIG SET slowlog-max-len 256 redis-cli CONFIG SET maxclients 20000 redis-cli CONFIG SET requirepass "yourStrongPassword" # 运行时修改密码
修改requirepass时要特别小心,如果业务端连接池没有同步更新密码,会导致后续请求全部鉴权失败。建议先在代码中支持新密码的热加载,再执行修改,或者使用ACL功能做更精细的权限控制。
用CONFIG REWRITE把修改持久化到配置文件
CONFIG SET的修改只存在于内存中,一旦Redis重启,配置就会回退到redis.conf中原来的值。这一点是很多人踩过的坑:线上用CONFIG SET调整了参数,运行了半年没问题,某次重启后配置全部丢失,引发故障。解决办法是在CONFIG SET之后紧接着执行CONFIG REWRITE:
redis-cli CONFIG SET maxmemory 8gb redis-cli CONFIG REWRITE
CONFIG REWRITE会把当前运行时的全部配置写回redis.conf文件,它在文件末尾追加一个带有注释标记的区块,覆盖之前的同名配置项。执行前请确保Redis进程对配置文件有写权限,否则命令会报错。另外,如果启动Redis时没有指定配置文件(比如直接执行redis-server不带参数),CONFIG REWRITE也会失败,因为Redis不知道该写回哪个文件。
使用注意事项与常见坑
首先,并非所有参数都支持动态修改。比如port、bind、daemonize、dir等涉及网络监听和进程行为的参数,必须重启才能生效。可以执行CONFIG GET *查看所有支持动态查询的参数,Redis对不支持的参数会直接报错,不会产生误操作。
其次,在主从架构下要注意配置的传播问题。CONFIG SET只在当前实例上生效,不会自动同步到从节点。如果主从节点的maxmemory和淘汰策略不一致,可能导致主从数据不一致或复制异常。运维规范中应该明确要求主从节点使用相同的CONFIG SET操作,并保持redis.conf内容一致。
最后,建议把生产环境所有的动态配置变更纳入变更管理流程,记录操作时间、操作人和前后参数值。条件允许的话,用自动化脚本同时完成CONFIG SET和CONFIG REWRITE两步操作,避免遗漏持久化步骤。对于Redis Cluster环境,还需要用redis-cli --cluster的方式逐个节点执行,或者写脚本遍历所有主节点,确保整个集群的配置保持统一。
掌握CONFIG SET之后,大部分日常配置调整都可以做到业务无感知,配合CONFIG REWRITE保证配置不丢失,Redis运维的灵活性会提升一个台阶。
Redis CONFIG SETRedis动态配置Redis运维修改时间:2026-09-05 14:58:27