Redis配置文件最佳實踐
更新時間:2025年05月23日 08:49:49 作者:huangSir-devops
這篇文章主要介紹了Redis配置文件詳解,本文主要是根據(jù)Redis6.0.x版本的配置文件講解,其它版本的也可以當做一個參考,需要的朋友可以參考下
概述
Redis 配置文件的官網(wǎng)地址:https://redis.io/topics/config
GitHub地址:https://github.com/redis/redis/blob/unstable/redis.conf
本文主要是根據(jù)Redis6.0.x版本的配置文件講解,其它版本的也可以當做一個參考。
Redis配置說明
基礎配置
# 綁定的IP地址(默認綁定127.0.0.1,僅本地訪問) # 生產(chǎn)環(huán)境建議綁定具體IP或0.0.0.0(需配合防火墻/密碼) bind 0.0.0.0 # 監(jiān)聽端口(默認6379) port 6379 # 是否以守護進程方式運行(默認no),生產(chǎn)環(huán)境建議使用yes daemonize yes # PID文件路徑 pidfile /var/run/redis_6379.pid # 日志級別(debug|verbose|notice|warning,默認notice) loglevel notice # 日志文件路徑(設為stdout輸出到控制臺,默認空) logfile "/var/log/redis/redis.log" # 數(shù)據(jù)庫數(shù)量(0-15,默認16個) databases 16 # 是否開啟保護模式(默認yes,僅允許本地訪問或密碼訪問) protected-mode yes # 客戶端最大連接數(shù)(默認10000,設為0表示無限制) maxclients 10000
內(nèi)存管理
# 最大內(nèi)存限制(如2gb、512mb,默認0表示不限制,生產(chǎn)環(huán)境必須設置) maxmemory 0 # 內(nèi)存淘汰策略(默認noeviction) # - noeviction:禁止寫入,返回錯誤 # - allkeys-lru:移除最近最少使用的key # - allkeys-random:隨機移除key # - volatile-lru:移除設置了過期時間的LRU key # - volatile-random:隨機移除設置了過期時間的key # - volatile-ttl:移除即將過期的key # - volatile-lfu:移除最不經(jīng)常使用的帶過期時間的key # - allkeys-lfu:移除最不經(jīng)常使用的key maxmemory-policy noeviction # LRU/LFU算法的近似精度(值越大越精確,默認50) maxmemory-samples 50 # 是否開啟內(nèi)存碎片自動整理(默認no) activedefrag no # 碎片整理觸發(fā)的最小內(nèi)存碎片量(默認100mb) active-defrag-ignore-bytes 100mb # 碎片整理觸發(fā)的最小碎片率(默認10%) active-defrag-threshold-lower 10 # 碎片整理觸發(fā)的最大碎片率(默認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>) # 可設置多條規(guī)則,滿足任一條件即觸發(fā) save 900 1 # 900秒內(nèi)至少1個key被修改 save 300 10 # 300秒內(nèi)至少10個key被修改 save 60 10000 # 60秒內(nèi)至少10000個key被修改 # 禁用RDB快照(注釋所有save行) # save "" # RDB文件名稱(默認dump.rdb) dbfilename dump.rdb # RDB文件存儲路徑(必須是目錄) dir ./ # RDB文件是否壓縮(默認yes,壓縮可能影響性能) rdbcompression yes # RDB文件是否添加CRC64校驗和(默認yes,犧牲約10%性能換取數(shù)據(jù)完整性) 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:由操作系統(tǒng)決定何時同步(最快但可能丟失數(shù)據(jù)) appendfsync everysec # AOF重寫期間是否暫停fsync(默認no,避免數(shù)據(jù)丟失) no-appendfsync-on-rewrite no # AOF文件自動重寫的最小大?。J64mb) auto-aof-rewrite-min-size 64mb # AOF文件自動重寫的增長率(默認100%,即當前文件是上次重寫后2倍時觸發(fā)) auto-aof-rewrite-percentage 100 # 加載AOF文件時是否忽略最后一條可能不完整的命令(默認yes) aof-load-truncated yes # AOF重寫時是否使用RDB格式的前綴(減少文件體積,默認yes) aof-use-rdb-preamble yes
主從復制
# 設置當前Redis為從節(jié)點,并指定主節(jié)點(主節(jié)點IP和端口) replicaof <masterip> <masterport> # 主節(jié)點密碼(如果有) masterauth <password> # 從節(jié)點是否只讀(默認yes) replica-read-only yes # 主從復制的網(wǎng)絡超時時間(秒,默認60) repl-timeout 60 # 主從復制的心跳頻率(秒,默認10) repl-ping-replica-period 10 # 復制緩沖區(qū)大?。ㄓ糜诒4嬷鞴?jié)點未同步給從節(jié)點的寫命令,默認1mb) repl-backlog-size 1mb # 復制緩沖區(qū)的持久化時間(秒,超過此時長且無從節(jié)點連接則釋放內(nèi)存,默認3600) repl-backlog-ttl 3600 # 從節(jié)點優(yōu)先級(數(shù)值越小優(yōu)先級越高,0表示不參與選舉,默認100) replica-priority 100 # 主節(jié)點不可用時,從節(jié)點是否繼續(xù)服務讀請求(默認yes) replica-serve-stale-data yes # 是否使用無盤復制(主節(jié)點直接通過網(wǎng)絡發(fā)送RDB,避免磁盤I/O,默認no) repl-diskless-sync no # 無盤復制的延遲時間(秒,等待更多從節(jié)點連接后一起傳輸,默認5) repl-diskless-sync-delay 5
安全配置
# 設置訪問密碼(建議使用復雜密碼,生產(chǎn)環(huán)境必須設置) requirepass foobared # 是否啟用ACL(訪問控制列表,替代傳統(tǒng)密碼,默認no) aclfile /etc/redis/users.acl # 重命名危險命令(例如將FLUSHALL改為安全名稱,或禁用命令) # rename-command FLUSHALL "" # 禁用命令 # rename-command FLUSHALL "FLUSHDB" # 重命名命令(不建議)
網(wǎng)絡與連接
# TCP連接的backlog隊列長度(默認511,影響短時間內(nèi)的突發(fā)連接處理能力) tcp-backlog 511 # TCP連接?;顣r間(秒,默認300) tcp-keepalive 300 # 是否禁用TCP_NODELAY(默認no,啟用Nagle算法減少網(wǎng)絡包數(shù)量,但可能增加延遲) tcp-nodelay no # 客戶端閑置超時時間(單位秒,默認0表示不超時) timeout 0
慢查詢?nèi)罩?/h3>
# 慢查詢閾值(微秒,默認10000=10ms)
slowlog-log-slower-than 10000
# 慢查詢?nèi)罩镜淖畲箝L度(默認128)
slowlog-max-len 128
# 慢查詢閾值(微秒,默認10000=10ms) slowlog-log-slower-than 10000 # 慢查詢?nèi)罩镜淖畲箝L度(默認128) slowlog-max-len 128
I/O 線程
# 是否啟用I/O多線程(默認no,4.0+支持,僅加速網(wǎng)絡I/O,命令執(zhí)行仍為單線程) io-threads-do-reads no # I/O線程數(shù)(建議設置為CPU核心數(shù)的一半,不超過8,默認4) io-threads 4
集群配置(Redis Cluster)
# 是否啟用集群模式(默認no),設置為 yes 時,Redis 實例將以集群節(jié)點的身份運行,參與集群的管理和數(shù)據(jù)分布。 cluster-enabled no # 集群配置文件(自動生成,無需手動編輯) cluster-config-file nodes.conf # 節(jié)點超時時間(毫秒,默認15000) cluster-node-timeout 15000 # 故障轉(zhuǎn)移時,從節(jié)點復制的最小時長(秒,默認10) cluster-replica-validity-factor 10 # 集群是否要求所有槽位都被分配(默認yes,避免腦裂) cluster-require-full-coverage yes # 從節(jié)點是否可以遷移到其他主節(jié)點(默認yes) cluster-migration-barrier 1
發(fā)布訂閱
# 發(fā)布訂閱的客戶端連接數(shù)上限(默認不限制,設為0表示不限制) pubsub-max-connections 0 # 發(fā)布訂閱的消息隊列長度上限(默認32,防止內(nèi)存溢出) client-output-buffer-limit pubsub 32mb 8mb 60
監(jiān)控與統(tǒng)計
# 是否記錄內(nèi)存分配信息(默認no,生產(chǎn)環(huán)境建議關(guān)閉) memtier yes # 是否記錄內(nèi)存碎片信息(默認yes) meminfo-command yes # 是否記錄內(nèi)存分配器的詳細信息(默認no) malloc-stats no
其他配置
# 是否在啟動時檢查AOF文件(默認yes) aof-checksum yes # 是否啟用Lua腳本功能(默認yes) lua-time-limit 5000 # Lua腳本最大執(zhí)行時間(毫秒,默認5000) # 是否啟用哈希表的漸進式rehash(默認yes,提高性能) activerehashing yes # 是否啟用大頁內(nèi)存(默認no,啟用可能導致延遲問題) transparent-hugepage yes # 是否啟用客戶端追蹤(默認no,用于調(diào)試客戶端請求來源) client-tracking no # 客戶端追蹤的重定向模式(默認OFF) # - ON:追蹤所有客戶端 # - REDIRECT:將追蹤信息重定向到指定客戶端 client-tracking-redirection "" # 是否啟用延遲監(jiān)控(默認no) latency-monitor-threshold 0 # 設為0表示禁用,設為具體值(如10)則監(jiān)控超過此值的操作 # 延遲監(jiān)控的歷史記錄長度(默認1024) latency-history-length 1024
配置文件最佳實踐
- 設置 maxmemory 和合理的 maxmemory-policy(如 allkeys-lru)。
- 啟用 AOF 持久化(appendonly yes)并設置 appendfsync everysec。
- 配置 requirepass 并禁用危險命令(如 FLUSHALL)。
- 對于讀寫密集型場景,啟用 I/O 線程(io-threads)。
- 根據(jù)內(nèi)存碎片情況調(diào)整 activedefrag 參數(shù)。
- 禁用不必要的功能(如 Lua 腳本、發(fā)布訂閱)以減少資源消耗。
- 禁用 protected-mode 并通過 bind 和防火墻限制訪問。
- 使用 ACL 替代傳統(tǒng)密碼認證(Redis 6.0+)。
- 定期備份 RDB 或 AOF 文件到外部存儲。
到此這篇關(guān)于Redis配置文件詳解的文章就介紹到這了,更多相關(guān)Redis配置文件詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis KEYS查詢大批量數(shù)據(jù)替代方案
在使用 Redis 時,KEYS 命令雖然簡單直接,但其全表掃描的特性在處理大規(guī)模數(shù)據(jù)時會導致性能問題,甚至可能阻塞 Redis 服務,本文將介紹SCAN命令、有序集合、哈希表和RediSearch模塊四種替代 KEYS 的高效方案,需要的朋友可以參考下2024-12-12