概述
Redis 配置文件的官網地址:https://redis.io/topics/config
GitHub地址:https://github.com/redis/redis/blob/unstable/redis.conf
本文主要是根據Redis6.0.x版本的配置文件講解,其它版本的也可以當做一個參考。
Redis配置説明
基礎配置
# 綁定的IP地址(默認綁定127.0.0.1,僅本地訪問)
# 生產環境建議綁定具體IP或0.0.0.0(需配合防火牆/密碼)
bind 0.0.0.0
# 監聽端口(默認6379)
port 6379
# 是否以守護進程方式運行(默認no),生產環境建議使用yes
daemonize yes
# PID文件路徑
pidfile /var/run/redis_6379.pid
# 日誌級別(debug|verbose|notice|warning,默認notice)
loglevel notice
# 日誌文件路徑(設為stdout輸出到控制枱,默認空)
logfile "/var/log/redis/redis.log"
# 數據庫數量(0-15,默認16個)
databases 16
# 是否開啓保護模式(默認yes,僅允許本地訪問或密碼訪問)
protected-mode yes
# 客户端最大連接數(默認10000,設為0表示無限制)
maxclients 10000
內存管理
# 最大內存限制(如2gb、512mb,默認0表示不限制,生產環境必須設置)
maxmemory 0
# 內存淘汰策略(默認noeviction)
# - noeviction:禁止寫入,返回錯誤
# - allkeys-lru:移除最近最少使用的key
# - allkeys-random:隨機移除key
# - volatile-lru:移除設置了過期時間的LRU key
# - volatile-random:隨機移除設置了過期時間的key
# - volatile-ttl:移除即將過期的key
# - volatile-lfu:移除最不經常使用的帶過期時間的key
# - allkeys-lfu:移除最不經常使用的key
maxmemory-policy noeviction
# LRU/LFU算法的近似精度(值越大越精確,默認50)
maxmemory-samples 50
# 是否開啓內存碎片自動整理(默認no)
activedefrag no
# 碎片整理觸發的最小內存碎片量(默認100mb)
active-defrag-ignore-bytes 100mb
# 碎片整理觸發的最小碎片率(默認10%)
active-defrag-threshold-lower 10
# 碎片整理觸發的最大碎片率(默認100%)
active-defrag-threshold-upper 100
# 碎片整理使用的CPU時間下限(默認1%)
active-defrag-cycle-min 1
# 碎片整理使用的CPU時間上限(默認25%,避免影響正常服務)
active-defrag-cycle-max 25
持久化配置
RDB 快照
# 自動生成RDB快照的條件(save <seconds> <changes>)
# 可設置多條規則,滿足任一條件即觸發
save 900 1 # 900秒內至少1個key被修改
save 300 10 # 300秒內至少10個key被修改
save 60 10000 # 60秒內至少10000個key被修改
# 禁用RDB快照(註釋所有save行)
# save ""
# RDB文件名稱(默認dump.rdb)
dbfilename dump.rdb
# RDB文件存儲路徑(必須是目錄)
dir ./
# RDB文件是否壓縮(默認yes,壓縮可能影響性能)
rdbcompression yes
# RDB文件是否添加CRC64校驗和(默認yes,犧牲約10%性能換取數據完整性)
rdb-checksum yes
# 後台生成RDB時是否使用增量fsync(默認yes,4.0+支持)
rdb-save-incremental-fsync yes
AOF配置
# 是否啓用AOF持久化(默認no)
appendonly no
# AOF文件名(默認appendonly.aof)
appendfilename "appendonly.aof"
# AOF同步策略(默認everysec)
# - always:每次寫操作都同步到磁盤(最慢但最安全)
# - everysec:每秒同步一次(兼顧性能和安全性)
# - no:由操作系統決定何時同步(最快但可能丟失數據)
appendfsync everysec
# AOF重寫期間是否暫停fsync(默認no,避免數據丟失)
no-appendfsync-on-rewrite no
# AOF文件自動重寫的最小大小(默認64mb)
auto-aof-rewrite-min-size 64mb
# AOF文件自動重寫的增長率(默認100%,即當前文件是上次重寫後2倍時觸發)
auto-aof-rewrite-percentage 100
# 加載AOF文件時是否忽略最後一條可能不完整的命令(默認yes)
aof-load-truncated yes
# AOF重寫時是否使用RDB格式的前綴(減少文件體積,默認yes)
aof-use-rdb-preamble yes
主從複製
# 設置當前Redis為從節點,並指定主節點(主節點IP和端口)
replicaof <masterip> <masterport>
# 主節點密碼(如果有)
masterauth <password>
# 從節點是否只讀(默認yes)
replica-read-only yes
# 主從複製的網絡超時時間(秒,默認60)
repl-timeout 60
# 主從複製的心跳頻率(秒,默認10)
repl-ping-replica-period 10
# 複製緩衝區大小(用於保存主節點未同步給從節點的寫命令,默認1mb)
repl-backlog-size 1mb
# 複製緩衝區的持久化時間(秒,超過此時長且無從節點連接則釋放內存,默認3600)
repl-backlog-ttl 3600
# 從節點優先級(數值越小優先級越高,0表示不參與選舉,默認100)
replica-priority 100
# 主節點不可用時,從節點是否繼續服務讀請求(默認yes)
replica-serve-stale-data yes
# 是否使用無盤複製(主節點直接通過網絡發送RDB,避免磁盤I/O,默認no)
repl-diskless-sync no
# 無盤複製的延遲時間(秒,等待更多從節點連接後一起傳輸,默認5)
repl-diskless-sync-delay 5
安全配置
# 設置訪問密碼(建議使用複雜密碼,生產環境必須設置)
requirepass foobared
# 是否啓用ACL(訪問控制列表,替代傳統密碼,默認no)
aclfile /etc/redis/users.acl
# 重命名危險命令(例如將FLUSHALL改為安全名稱,或禁用命令)
# rename-command FLUSHALL "" # 禁用命令
# rename-command FLUSHALL "FLUSHDB" # 重命名命令(不建議)
網絡與連接
# TCP連接的backlog隊列長度(默認511,影響短時間內的突發連接處理能力)
tcp-backlog 511
# TCP連接保活時間(秒,默認300)
tcp-keepalive 300
# 是否禁用TCP_NODELAY(默認no,啓用Nagle算法減少網絡包數量,但可能增加延遲)
tcp-nodelay no
# 客户端閒置超時時間(單位秒,默認0表示不超時)
timeout 0
慢查詢日誌
# 慢查詢閾值(微秒,默認10000=10ms)
slowlog-log-slower-than 10000
# 慢查詢日誌的最大長度(默認128)
slowlog-max-len 128
I/O 線程
# 是否啓用I/O多線程(默認no,4.0+支持,僅加速網絡I/O,命令執行仍為單線程)
io-threads-do-reads no
# I/O線程數(建議設置為CPU核心數的一半,不超過8,默認4)
io-threads 4
集羣配置(Redis Cluster)
# 是否啓用集羣模式(默認no),設置為 yes 時,Redis 實例將以集羣節點的身份運行,參與集羣的管理和數據分佈。
cluster-enabled no
# 集羣配置文件(自動生成,無需手動編輯)
cluster-config-file nodes.conf
# 節點超時時間(毫秒,默認15000)
cluster-node-timeout 15000
# 故障轉移時,從節點複製的最小時長(秒,默認10)
cluster-replica-validity-factor 10
# 集羣是否要求所有槽位都被分配(默認yes,避免腦裂)
cluster-require-full-coverage yes
# 從節點是否可以遷移到其他主節點(默認yes)
cluster-migration-barrier 1
發佈訂閲
# 發佈訂閲的客户端連接數上限(默認不限制,設為0表示不限制)
pubsub-max-connections 0
# 發佈訂閲的消息隊列長度上限(默認32,防止內存溢出)
client-output-buffer-limit pubsub 32mb 8mb 60
監控與統計
# 是否記錄內存分配信息(默認no,生產環境建議關閉)
memtier yes
# 是否記錄內存碎片信息(默認yes)
meminfo-command yes
# 是否記錄內存分配器的詳細信息(默認no)
malloc-stats no
其他配置
# 是否在啓動時檢查AOF文件(默認yes)
aof-checksum yes
# 是否啓用Lua腳本功能(默認yes)
lua-time-limit 5000 # Lua腳本最大執行時間(毫秒,默認5000)
# 是否啓用哈希表的漸進式rehash(默認yes,提高性能)
activerehashing yes
# 是否啓用大頁內存(默認no,啓用可能導致延遲問題)
transparent-hugepage yes
# 是否啓用客户端追蹤(默認no,用於調試客户端請求來源)
client-tracking no
# 客户端追蹤的重定向模式(默認OFF)
# - ON:追蹤所有客户端
# - REDIRECT:將追蹤信息重定向到指定客户端
client-tracking-redirection ""
# 是否啓用延遲監控(默認no)
latency-monitor-threshold 0 # 設為0表示禁用,設為具體值(如10)則監控超過此值的操作
# 延遲監控的歷史記錄長度(默認1024)
latency-history-length 1024
配置文件最佳實踐
- 設置 maxmemory 和合理的 maxmemory-policy(如 allkeys-lru)。
- 啓用 AOF 持久化(appendonly yes)並設置 appendfsync everysec。
- 配置 requirepass 並禁用危險命令(如 FLUSHALL)。
- 對於讀寫密集型場景,啓用 I/O 線程(io-threads)。
- 根據內存碎片情況調整 activedefrag 參數。
- 禁用不必要的功能(如 Lua 腳本、發佈訂閲)以減少資源消耗。
- 禁用 protected-mode 並通過 bind 和防火牆限制訪問。
- 使用 ACL 替代傳統密碼認證(Redis 6.0+)。
- 定期備份 RDB 或 AOF 文件到外部存儲。
如何修改Redis的配置
方式一
修改Redis的配置文件Redis.conf,然後重啓Redis
方式二
使用Redis-cli工具修改,此方法無需重啓Redis
語法:
Redis-cli CONFIG SET <配置項> <配置項的值>
示例:
edis-cli CONFIG SET appendfsync everysec