redis.conf 是 Redis 服務器啟動時讀取的核心配置文件,涵蓋網絡、內存、持久化、復制、安全、緩慢日志等所有運行時參數。合理調優配置對於生產環境的穩定性、性能、數據安全至關重要。本文系統梳理核心參數含義、默認值及調優建議。
| 參數 | 默認值 | 說明與調優建議 |
|---|---|---|
| daemonize | no | 是否以守護進程運行。生產環境建議 yes,配合系統服務管理 |
| port | 6379 | 監聽端口。避免默認端口暴露公網,建議修改並配置防火牆 |
| bind | 127.0.0.1 | 綁定 IP。生產環境綁定內網 IP,禁止 0.0.0.0 |
| timeout | 0 | 客戶端空閒超時斷開(秒)。0 為不超時。建議設置 300-600 釋放閒置連接 |
| tcp-keepalive | 300 | TCP 心跳檢測間隔(秒)。防止防火牆斷開長連接,建議 60-300 |
| loglevel | notice | 日志級別:debug/verbose/notice/warning。生產環境 notice 或 warning |
| databases | 16 | 數據庫數量。建議業務隔離使用單實例多 DB 或多實例部署 |
maxmemory 2gb # 限制最大內存,必須設置,防止 OOM maxmemory-policy allkeys-lru # 內存不足時的淘汰策略
六大淘汰策略對比:
| 策略 | 適用場景 | 特點 |
|---|---|---|
| volatile-lru | 僅淘汰設置過期時間的 Key | LRU 算法,需業務明確設置 TTL |
| allkeys-lru | 通用緩存場景(推薦) | 全局 LRU,無需設置 TTL,命中率高 |
| volatile-random | 隨機淘汰過期 Key | 性能較好,但淘汰隨機性大 |
| allkeys-random | 隨機淘汰任意 Key | 不推薦,可能誤刪熱點數據 |
| volatile-ttl | 優先淘汰即將過期 Key | 配合 TTL 使用,精確控制 |
| noeviction | 不淘汰,寫入報錯 | 嚴格數據安全場景,但會導致寫入失敗 |
maxmemory-samples 5:LRU/TTL 算法採樣數,值越大越精確但消耗 CPU,建議 5-10。
save 900 1 # 900秒內至少1次寫入觸發快照 save 300 10 # 300秒內至少10次寫入觸發快照 save 60 10000 # 60秒內至少10000次寫入觸發快照 stop-writes-on-bgsave-error yes # 快照失敗是否停止寫入,建議 yes(有監控可改 no) rdbcompression yes # 快照壓縮,節省磁盤/網絡傳輸,CPU 開銷可接受 dbfilename dump.rdb # 快照文件名 rdbchecksum yes # CRC64 校驗,開啟後性能損耗 ~10%,建議開啟保障數據完整性
appendonly no # 是否開啟 AOF,建議開啟 yes(數據安全優先) appendfilename "appendonly.aof" appendfsync everysec # 同步策略:always(每寫入)/everysec(每秒)/no(依賴OS) # 生產環境推薦 everysec:性能與安全平衡,最多丟失 1 秒數據 no-appendfsync-on-rewrite no # 重寫期間是否暫停同步,建議 no 保證數據不丟 auto-aof-rewrite-percentage 100 # AOF 文件增長 100% 觸發重寫 auto-aof-rewrite-min-size 64mb # AOF 文件最小重寫尺寸
# 從節點配置 replicaof# 指定主節點(舊版 slaveof) masterauth # 主節點認證密碼 replica-serve-stale-data yes # 斷開/同步中是否繼續服務:yes(可能讀舊數據)/no(返回錯誤) replica-read-only yes # 從節點只讀,防止誤寫入 repl-disable-tcp-nodelay no # no=立即發送(低延遲)/yes=合併發送(節省帶寬,~40ms延遲) repl-ping-replica-period 10 # 從節點心跳間隔(秒) repl-timeout 60 # 超時時間,必須 > repl-ping-replica-period repl-backlog-size 32mb # 復制積壓緩衝區大小,斷線重連增量同步依賴此緩衝區 repl-backlog-ttl 3600 # 主從斷開後緩衝區保留時間(秒) replica-priority 100 # 故障轉移優先級,數值越小優先級越高
slowlog-log-slower-than 10000 # 記錄超過 10ms 的命令(微秒) slowlog-max-len 128 # 最大保留 128 條慢日志 latency-monitor-threshold 0 # 延遲監控閾值(毫秒),0 關閉。建議設置 100 啟用監控
針對小數據結構採用緊湊編碼節省內存:
hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-entries 512 list-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64
超過閾值自動轉換為標準結構(HashMap、雙向鏈表、跳表等)。
# 普通客戶端:無硬限制,無軟限制 client-output-buffer-limit normal 0 0 0 # 從節點/監視器:硬限制 768MB,軟限制 256MB 持續 60s 斷開 client-output-buffer-limit replica 768mb 256mb 60 # 發布訂閱客戶端:硬限制 32MB,軟限制 8MB 持續 60s 斷開 client-output-buffer-limit pubsub 32mb 8mb 60
requirepass your_strong_password # 客戶端認證密碼,必須設置複雜密碼 rename-command FLUSHALL "" # 禁用/重命名危險命令 rename-command CONFIG "" # 禁用 CONFIG 命令防止配置被竄改 rename-command KEYS "" # 禁用 KEYS 防止阻塞
maxmemory 設置為物理內存 70-80%,預留系統內存save "" 關閉 RDB 定時快照,僅備份用;AOF everysec 保數據)repl-backlog-size 足夠大(如 1-2GB)應對網絡抖動slowlog-log-slower-than 5000(5ms),定期分析優化熱點命令rename-command 禁用 KEYS、FLUSHALL、FLUSHDB、CONFIG 等timeout、tcp-keepalive、client-output-buffer-limit掌握 Redis 配置參數的核心邏輯與調優原則,能讓你在高併發、大數據量場景下構建穩定、高效、安全的 Redis 服務集群。