2. Redis 配置基础:redis.conf 文件结构解析与常用配置项分类
Redis 的配置体系高度集中在一个文本文件 redis.conf 中。无论是开发环境快速原型,还是生产环境高可用集群,理解该文件的结构与分类是排查配置差异的第一步。本章将拆解 redis.conf 的物理结构,并按内存、持久化、网络、安全四大维度梳理核心配置项。
2.1 redis.conf 文件结构解析
一个典型的 redis.conf 文件由以下逻辑区块组成,每个区块以注释标题分隔:
| 区块 | 行号范围(示例) | 核心内容 |
|---|---|---|
| INCLUDES | 1–20 | include /path/to/local.conf,引入外部配置文件,常用于拆分环境差异 |
| MODULES | 21–40 | loadmodule /path/to/module.so,加载 Redis 模块(如 RediSearch、RedisJSON) |
| NETWORK | 41–120 | bind、port、tcp-backlog、timeout、tcp-keepalive |
| TLS/SSL | 121–180 | tls-port、tls-cert-file、tls-key-file(生产环境必配) |
| GENERAL | 181–260 | daemonize、pidfile、loglevel、logfile、databases |
| SNAPSHOTTING | 261–340 | save、stop-writes-on-bgsave-error、rdbcompression、dbfilename |
| REPLICATION | 341–440 | replicaof、masterauth、repl-backlog-size、min-replicas-to-write |
| SECURITY | 441–500 | requirepass、rename-command、ACL 配置块 |
| CLIENTS | 501–530 | maxclients、client-output-buffer-limit |
| MEMORY MANAGEMENT | 531–600 | maxmemory、maxmemory-policy、maxmemory-samples |
| LAZY FREEING | 601–630 | lazyfree-lazy-eviction、lazyfree-lazy-expire |
| APPEND ONLY MODE | 631–720 | appendonly、appendfsync、auto-aof-rewrite-percentage |
| SLOW LOG | 721–760 | slowlog-log-slower-than、slowlog-max-len |
| LATENCY MONITOR | 761–790 | latency-monitor-threshold |
| EVENT NOTIFICATION | 791–820 | notify-keyspace-events |
| ADVANCED CONFIG | 821–950 | hash-max-ziplist-entries、set-max-intset-entries、activerehashing |
排查要点:开发环境常省略 INCLUDES 和 TLS/SSL 区块,生产环境则必须通过
include 拆分通用配置与敏感配置(如密码、证书路径),避免将密钥写入版本控制。
2.2 内存管理配置
内存是 Redis 最核心的资源。开发环境通常不设上限,生产环境必须精确控制。
| 配置项 | 开发环境典型值 | 生产环境典型值 | 说明 |
|---|---|---|---|
maxmemory |
0(不限制) | 物理内存的 70%–80% | 超过上限后触发淘汰策略;生产必须设置,防止 OOM |
maxmemory-policy |
noeviction |
allkeys-lru 或 volatile-lru |
开发环境用 noeviction 暴露内存溢出错误;生产用 LRU 保证服务可用 |
maxmemory-samples |
5 | 10 | LRU 采样数,越大淘汰越精确,CPU 开销略增 |
hash-max-ziplist-entries |
512 | 512 | 小编码阈值,通常不调整;生产若有大 Hash 可调大 |
常见陷阱:开发环境使用
maxmemory 0 且 maxmemory-policy noeviction,当数据量超过物理内存时直接触发 OOM Killer。生产环境若误用 noeviction,写入操作会全部返回 OOM 错误,导致缓存雪崩。
2.3 持久化配置
Redis 提供 RDB(快照)和 AOF(追加日志)两种持久化方式。开发环境常关闭持久化以提升性能,生产环境必须至少开启一种。
| 配置项 | 开发环境 | 生产环境 | 差异影响 |
|---|---|---|---|
save |
注释掉所有 save 行 | save 900 1 save 300 10 save 60 10000 |
开发无持久化,重启数据丢失;生产按策略落盘 |
appendonly |
no |
yes |
AOF 提供秒级数据安全,但增加磁盘 IO |
appendfsync |
no |
everysec |
开发不 fsync 性能最高;生产 everysec 平衡性能与安全 |
auto-aof-rewrite-percentage |
100 | 100 | AOF 文件增长到上次重写大小的 100% 时触发重写 |
stop-writes-on-bgsave-error |
no |
yes |
生产环境若磁盘故障,停止写入防止数据不一致 |
排查建议:使用
INFO persistence 命令检查当前持久化状态。生产环境若同时开启 RDB + AOF,Redis 重启时优先使用 AOF 恢复数据,因为 AOF 日志更完整。
2.4 网络配置
网络配置直接决定 Redis 的可达性与连接稳定性。开发环境通常监听本地回环地址,生产环境需要绑定内网 IP 并配置安全组。
| 配置项 | 开发环境 | 生产环境 | 说明 |
|---|---|---|---|
bind |
127.0.0.1 |
10.0.0.1(内网 IP) |
生产禁止绑定 0.0.0.0,防止未授权访问 |
port |
6379 |
6379 或自定义端口 |
生产建议更换默认端口,降低扫描攻击风险 |
tcp-backlog |
511 |
1024 或更高 |
高并发生产环境需配合系统 somaxconn 调大 |
timeout |
0(不断开) |
300(秒) |
生产环境设置空闲超时,释放连接资源 |
tcp-keepalive |
0 |
300 |
检测死连接,生产建议 300 秒 |
2.5 安全配置
安全配置是开发与生产环境差异最大的领域。开发环境常完全开放,生产环境需要层层加固。
| 配置项 | 开发环境 | 生产环境 | 说明 |
|---|---|---|---|
requirepass |
注释掉(无密码) | 设置强密码(32位以上随机串) | 生产必须启用;开发若开启,需确保应用配置同步 |
rename-command |
不配置 | rename-command FLUSHALL "" rename-command CONFIG "" |
禁用或重命名危险命令,防止误操作或注入 |
ACL 配置块 |
不配置 | 按用户分配最小权限 | Redis 6+ 推荐 ACL 替代全局密码,实现细粒度控制 |
protected-mode |
no |
yes |
保护模式下,未配置密码且绑定 0.0.0.0 时拒绝外部连接 |
安全红线:生产环境禁止同时设置
protected-mode no、bind 0.0.0.0 且不配置 requirepass。这等于将 Redis 裸奔到公网,几分钟内就会被挖矿脚本扫描并植入后门。
2.6 配置分类全景图
下图展示了四大配置分类在 Redis 实例中的位置关系与数据流向:
2.7 开发与生产配置差异速查表
以下速查表汇总了最常引发故障的 10 个配置项差异,可直接用于配置审计:
| 配置项 | 开发环境 | 生产环境 | 风险等级 |
|---|---|---|---|
maxmemory |
0 | 物理内存 70%–80% | 🔴 高 |
maxmemory-policy |
noeviction | allkeys-lru | 🔴 高 |
appendonly |
no | yes | 🟡 中 |
save |
注释 | 多条件策略 | 🟡 中 |
bind |
127.0.0.1 | 内网 IP | 🔴 高 |
requirepass |
无 | 强密码 | 🔴 高 |
rename-command |
不配置 | 禁用 FLUSHALL/CONFIG | 🟡 中 |
timeout |
0 | 300 | 🟢 低 |
tcp-keepalive |
0 | 300 | 🟢 低 |
stop-writes-on-bgsave-error |
no | yes | 🟡 中 |
2.8 配置排查常用命令
在排查配置差异时,以下命令比直接查看 redis.conf 文件更可靠:
# 查看当前运行配置(不含默认值)
redis-cli CONFIG GET *
# 查看单个配置项
redis-cli CONFIG GET maxmemory
redis-cli CONFIG GET appendonly
# 查看持久化状态
redis-cli INFO persistence
# 查看内存使用与淘汰策略
redis-cli INFO memory
# 查看客户端连接与网络状态
redis-cli INFO clients
redis-cli INFO stats
# 查看安全相关配置
redis-cli CONFIG GET requirepass
redis-cli ACL LIST
最佳实践:生产环境应定期执行
redis-cli CONFIG GET * 导出配置快照,与基线配置进行 diff 对比。开发环境则建议使用 CONFIG REWRITE 将运行时配置持久化到文件,避免手动编辑遗漏。