CONFIG GET / SET / REWRITE 是什么
CONFIG 系列提供运行时配置能力:GET 查询当前值,SET 热修改(多数参数无需重启),REWRITE 把当前生效值写回启动时使用的配置文件。最容易踩的坑是「只 SET 不 REWRITE」——参数当下生效,实例一重启就回到旧值,于是问题在下次重启时复现,排查方向常常跑偏。还有一部分参数是只读的,只能改配置文件后重启。
基本信息
| 适用版本 | Redis 全版本;CONFIG SET 支持多参数改写需 7.0+ |
|---|---|
| 查询 | CONFIG GET <pattern>(支持通配) |
| 热改 | CONFIG SET <param> <value> |
| 持久化 | CONFIG REWRITE 写回启动配置文件 |
| 前置条件 | REWRITE 要求实例启动时带了配置文件,否则报错 |
| 只读参数 | 少部分参数不可热改,需改文件后重启 |
典型使用场景
- 应急调整:慢日志阈值、最大连接数等参数临时热改
- 变更留痕:改完后 REWRITE 写回文件,避免重启回退
- 排查配置漂移:对比 GET 到的值与配置文件内容
- 容器化部署:确认配置文件已挂载,否则 REWRITE 只写进容器层
- 容量调整:修改 maxmemory 或淘汰策略并立即验证效果
标准流程
标准流程
# 1) 先记录原值,便于对比与回滚
CONFIG GET maxmemory
CONFIG GET maxmemory-policy
# 2) 热改参数
CONFIG SET maxmemory 4gb
CONFIG SET maxmemory-policy allkeys-lru
CONFIG SET slowlog-log-slower-than 10000
# 3) 写回启动配置文件(前提:启动时带了配置文件)
CONFIG REWRITE
# 4) 核对已生效
CONFIG GET maxmemory; CONFIG GET slowlog-log-slower-than
CONFIG RESETSTAT # 排查时重置 INFO 统计要点对照
| 操作 | 影响范围 | 注意 |
|---|---|---|
| CONFIG SET | 立即生效,仅运行期 | 重启后失效,除非 REWRITE |
| CONFIG REWRITE | 写回启动配置文件 | 无配置文件启动时报错 |
| 只读参数 | 无法热改 | 需改文件并重启,评估业务影响 |
| CONFIG RESETSTAT | 重置 INFO 统计 | 会丢失历史计数,排查前先记录 |
| 容器场景 | 配置文件需挂载 | 否则 REWRITE 结果随容器重建丢失 |
容器环境的重点是挂载:把配置文件从宿主机挂载进容器,REWRITE 的结果才落在持久化位置;否则写进容器可写层,容器重建后配置又回到镜像里的旧值。
不确定语义的参数不要热改:调整 maxmemory 或淘汰策略会立刻触发大量淘汰甚至引发 OOM;修改持久化相关参数(如 save 规则、AOF 开关)会改变数据落盘行为,必须在低峰并有人盯盘时进行。