动态

详情 返回 返回

Redis配置文件詳解 - 动态 详情

概述

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
user avatar changelzj 头像 Junjunyi 头像 life2refuel 头像
点赞 3 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.