4. 生产环境典型配置:主从/哨兵/集群模式、开启AOF+RDB、强密码、内存上限、日志等级为notice
生产环境的 Redis 配置与开发环境有着本质区别。开发环境追求快速迭代与调试便利,而生产环境必须优先保障高可用、数据持久性、安全性与资源可控性。本章将逐一剖析生产环境中最关键的五大配置维度,并对比开发环境的常见差异。
4.1 高可用架构模式:主从 / 哨兵 / 集群
开发环境通常使用单机单实例,而生产环境必须根据业务规模与可用性要求选择分布式架构。
| 架构模式 | 适用场景 | 节点数要求 | 自动故障转移 | 数据分片 |
|---|---|---|---|---|
| 主从复制 | 读写分离、数据热备 | ≥2(1主1从) | ❌ 需手动切换 | ❌ |
| 哨兵模式 | 高可用、自动故障转移 | ≥3(1主2从+3哨兵) | ✅ 自动选举 | ❌ |
| 集群模式 | 海量数据、水平扩展 | ≥6(3主3从) | ✅ 自动槽迁移 | ✅ 16384个槽 |
开发 vs 生产差异:开发环境常关闭
replica-read-only no 允许从库写入以便调试;生产环境必须设置为 replica-read-only yes,防止数据不一致。
4.2 持久化策略:AOF + RDB 双开
开发环境常为了性能关闭持久化(save ""),生产环境必须开启持久化以防止数据丢失。推荐同时开启 AOF 和 RDB,形成互补。
| 持久化方式 | 开发环境 | 生产环境 | 说明 |
|---|---|---|---|
| RDB | save ""(关闭) |
save 900 1 300 10 60 10000 |
全量快照,用于快速恢复 |
| AOF | appendonly no |
appendonly yes |
增量日志,最多丢失1秒数据 |
| AOF fsync | 无 | appendfsync everysec |
每秒刷盘,性能与安全平衡 |
| AOF重写 | 无 | auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb |
避免AOF文件无限膨胀 |
关键配置示例(redis.conf):
# 开启RDB快照
save 900 1
save 300 10
save 60 10000
# 开启AOF
appendonly yes
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 混合持久化(Redis 4.0+)
aof-use-rdb-preamble yes
⚠️ 生产避坑:不要在生产环境使用
appendfsync always,该模式每次写入都刷盘,会导致写入QPS下降约50%。everysec 是经过业界验证的最佳实践。
4.3 安全配置:强密码与网络隔离
开发环境常不设密码或使用弱密码(如 123456),生产环境必须启用强密码认证并限制网络访问。
4.3.1 密码认证
# redis.conf 生产配置
requirepass Prod_R3dis!2024_Secure
masterauth Prod_R3dis!2024_Secure # 主从同步也需要密码
4.3.2 网络与命令安全
| 配置项 | 开发环境 | 生产环境 | 作用 |
|---|---|---|---|
bind |
0.0.0.0 |
127.0.0.1 10.0.0.1 |
限制监听IP,仅内网访问 |
protected-mode |
no |
yes |
防止未授权外网访问 |
rename-command |
不配置 | FLUSHALL ""FLUSHDB ""CONFIG "" |
禁用危险命令 |
maxclients |
默认10000 | 根据实例规格调整 | 防止连接耗尽 |
密码强度要求:生产环境密码应包含大小写字母、数字、特殊字符,长度≥16位。建议使用密码管理器生成,并定期轮换。
4.4 内存上限与淘汰策略
开发环境通常不设内存上限,生产环境必须设置 maxmemory 防止 OOM 导致进程被系统 Kill。
| 配置项 | 开发环境 | 生产环境 | 推荐值 |
|---|---|---|---|
maxmemory |
不设置(默认0) | 物理内存的70%~80% | 如16GB实例设为12GB |
maxmemory-policy |
noeviction |
allkeys-lru 或 volatile-lru |
缓存场景用 allkeys-lru |
maxmemory-samples |
5 | 10 | 提高淘汰精度 |
内存配置示例:
maxmemory 12gb
maxmemory-policy allkeys-lru
maxmemory-samples 10
⚠️ 关键提醒:生产环境严禁使用
noeviction 策略。当内存达到上限时,noeviction 会导致所有写入操作返回 OOM 错误,直接引发业务故障。
4.5 日志与监控配置
开发环境日志级别常设为 debug 或 verbose,生产环境必须调整为 notice 以减少磁盘 I/O 并聚焦关键事件。
| 配置项 | 开发环境 | 生产环境 | 说明 |
|---|---|---|---|
loglevel |
debug |
notice |
只记录警告及以上级别 |
logfile |
stdout | /var/log/redis/redis.log |
写入固定文件便于采集 |
slowlog-log-slower-than |
10000(10ms) | 1000(1ms) | 捕获慢查询 |
slowlog-max-len |
128 | 1024 | 保留更多慢日志 |
4.6 生产环境配置清单速查
以下为生产环境 Redis 实例的完整配置清单,可直接作为部署检查项:
| 配置类别 | 配置项 | 生产推荐值 | 检查结果 |
|---|---|---|---|
| 高可用 | 架构模式 | 哨兵 / 集群 | ✅ / ❌ |
replica-read-only |
yes | ✅ / ❌ | |
| 持久化 | save |
900 1 300 10 60 10000 | ✅ / ❌ |
appendonly |
yes | ✅ / ❌ | |
appendfsync |
everysec | ✅ / ❌ | |
| 安全 | requirepass |
强密码(≥16位) | ✅ / ❌ |
rename-command |
禁用 FLUSHALL/CONFIG | ✅ / ❌ | |
protected-mode |
yes | ✅ / ❌ | |
| 内存 | maxmemory |
物理内存的70%~80% | ✅ / ❌ |
maxmemory-policy |
allkeys-lru | ✅ / ❌ | |
| 日志 | loglevel |
notice | ✅ / ❌ |
slowlog-log-slower-than |
1000(1ms) | ✅ / ❌ |
最佳实践:建议将上述配置清单纳入 CI/CD 部署流水线,每次上线前自动比对生产配置与基线配置,防止配置漂移。