Redis5.0.4配置文件詳解

註明:

1、Redis版本 5.0.4

2、資源來源於網絡

原文地址:https://cloud.tencent.com/developer/article/1423727

 

單位

#當你需要爲某個配置項指定內存大小的時候,必須要帶上單位, #通常的格式就是 1k 5gb 4m 等: #1k => 1000 bytes

#1kb => 1024 bytes

#1m => 1000000 bytes

#1mb => 10241024 bytes

#1g => 1000000000 bytes

#1gb => 10241024*1024 bytes

文件引入

#引入其他的配置文件 #include /path/to/local.conf #include /path/to/other.conf

模塊加載

#啓動時加載模塊 #loadmodule /path/to/my_module.so #loadmodule /path/to/other_module.so

網絡

#指定redis只能接受來自此IP綁定的網卡的請求,注意此默認值默認外網是不可訪問的 bind 127.0.0.1

#是否開啓保護模式。如果沒有指定bind和密碼,redis只會本地進行訪問,拒絕外部訪問。 protected-mode yes

#默認端口,建議生產環境不要使用默認端口避免被惡意掃描到 port 6379

#TCP連接中已完成隊列(完成三次握手之後)的長度 tcp-backlog 511

#配置unix socket來讓redis支持監聽本地連接。 #unixsocket /tmp/redis.sock

#配置unix socket使用文件的權限 #unixsocketperm 700

#客戶端連接空閒超過timeout將會被斷開,爲0則斷開 timeout 0

#tcp keepalive參數 tcp-keepalive 300

基本配置

#是否後臺啓動 daemonize no

#可以通過upstart和systemd管理Redis守護進程 #選項: #supervised no - 沒有監督互動 #supervised upstart - 通過將Redis置於SIGSTOP模式來啓動信號 #supervised systemd - signal systemd將READY = 1寫入$ NOTIFY_SOCKET #supervised auto - 檢測upstart或systemd方法基於 UPSTART_JOB或NOTIFY_SOCKET環境變量 supervised no

#配置PID文件路徑 pidfile /var/run/redis_6379.pid

#日誌級別 #參數: # debug # verbose # notice # warning loglevel notice

#日誌文件 logfile “”

#是否打開記錄syslog功能 #syslog-enabled no

#syslog標識符 #syslog-ident redis

#日誌的來源 #syslog-facility local0

#數據庫的數量,默認使用的數據庫是DB 0 #可以通過”SELECT “命令選擇一個db #集羣環境默認只有DB 0 databases 16

#是否一直顯示logo always-show-logo yes

數據持久化RDB

#保存數據到磁盤: #save

#Will save the DB if both the given number of seconds and the given #number of write operations against the DB occurred.

#In the example below the behaviour will be to save:

#15分鐘有一個key發生變化就保存數據到磁盤 #after 900 sec (15 min) if at least 1 key changed

#5分鐘有10個key發生變化就保存數據到磁盤 #after 300 sec (5 min) if at least 10 keys changed

#1分鐘有10000個key發生變化就保存數據到磁盤 #after 60 sec if at least 10000 keys changed

#Note: you can disable saving completely by commenting out all “save” lines.

#還可以刪除所有以前配置的保存。 #通過添加帶有單個空字符串參數的保存指令 #like in the following example:

save 900 1 save 300 10 save 60 10000

#持久化出現錯誤後,是否依然進行繼續進行工作 stop-writes-on-bgsave-error yes

#是否校驗rdb文件 rdbcompression yes

#使用壓縮rdb文件,rdb文件壓縮使用LZF壓縮算法, rdbchecksum yes

#rdb文件名稱 dbfilename dump.rdb

#rdb使用上面的“dbfilename配置指令的文件名保存到這個目錄 dir ./

主從複製

#指定主節點。舊版本是:slaveof

#replicaof

#master的密碼 #masterauth

#當一個slave失去和master的連接,或者同步正在進行中,slave的行爲有兩種可能: #如果 replica-serve-stale-data 設置爲 “yes” (默認值),slave會繼續響應客戶端請求,可能是正常數據,也可能是還沒獲得值的空數據。 #如果 replica-serve-stale-data 設置爲 “no”,slave會回覆"正在從master同步(SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 命令。 replica-serve-stale-data yes

#配置從是否爲只讀,開啓後從則不能寫入數據,舊版本是:slave-read-only yes replica-read-only yes

#同步策略: 磁盤或socket,默認磁盤方式

repl-diskless-sync no

#如果非磁盤同步方式開啓,可以配置同步延遲時間,以等待master產生子進程通過socket傳輸RDB數據給slave。 #默認值爲5秒,設置爲0秒則每次傳輸無延遲。 repl-diskless-sync-delay 5

#slave根據指定的時間間隔向master發送ping請求。默認10秒。 #repl-ping-replica-period 10

#同步的超時時間 #slave在與master SYNC期間有大量數據傳輸,造成超時 #在slave角度,master超時,包括數據、ping等 #在master角度,slave超時,當master發送REPLCONF ACK pings#確保這個值大於指定的repl-ping-slave-period,否則在主從間流量不高時每次都會檢測到超時 #repl-timeout 60

#是否在slave套接字發送SYNC之後禁用 TCP_NODELAY #如果選擇yes,Redis將使用更少的TCP包和帶寬來向slaves發送數據。但是這將使數據傳輸到slave上有延遲,Linux內核的默認配置會達到40毫秒。 #如果選擇no,數據傳輸到salve的延遲將會減少但要使用更多的帶寬。 #默認我們會爲低延遲做優化,但高流量情況或主從之間的跳數過多時,可以設置爲“yes”。 repl-disable-tcp-nodelay no

#設置數據備份的backlog大小 #repl-backlog-size 1mb

#從最後一個slave斷開開始計時多少秒後,backlog緩衝將會釋放。 #repl-backlog-ttl 3600

#優先級 replica-priority 100

#如果master少於N個延時小於等於M秒的已連接slave,就可以停止接收寫操作。 #N個slave需要是“oneline”狀態。 #延時是以秒爲單位,並且必須小於等於指定值,是從最後一個從slave接收到的ping(通常每秒發送)開始計數。 #該選項不保證N個slave正確同步寫操作,但是限制數據丟失的窗口期。 #例如至少需要3個延時小於等於10秒的slave用下面的指令: #min-replicas-to-write 3 #min-replicas-max-lag 10

安全

#密碼 #requirepass foobared

#命令重命名 #設置命令爲空時禁用命令 #rename-command CONFIG “”

限制

#設置最多同時連接的客戶端數量 #maxclients 10000

#內存限制 #maxmemory

#如果達到上方最大的內存限制,Redis如何選擇刪除key #volatile-lru -> 根據LRU算法刪除設置過期時間的key #allkeys-lru -> 根據LRU算法刪除任何key #volatile-random -> 隨機移除設置過過期時間的key #allkeys-random -> 隨機移除任何key #volatile-ttl -> 移除即將過期的key(minor TTL) #noeviction -> 不移除任何key,只返回一個寫錯誤 #注意:對所有策略來說,如果Redis找不到合適的可以刪除的key都會在寫操作時返回一個錯誤。 #目前爲止涉及的命令:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort #maxmemory-policy noeviction

#LRU和最小TTL算法的樣本個數 #maxmemory-samples 5

懶刪除

#內存滿逐出 lazyfree-lazy-eviction no #過期key刪除 lazyfree-lazy-expire no #內部刪除,比如rename oldkey newkey時,如果newkey存在需要刪除newkey lazyfree-lazy-server-del no #接收完RDB文件後清空數據選項 replica-lazy-flush no

持久化方式AOF

#每次啓動時Redis都會先把這個文件的數據讀入內存裏,先忽略RDB文件

appendonly no

#AOF文件名稱 appendfilename “appendonly.aof”

#fsync() 系統調用告訴操作系統把數據寫到磁盤上,而不是等更多的數據進入輸出緩衝區。 #有些操作系統會真的把數據馬上刷到磁盤上;有些則會盡快去嘗試這麼做。 #Redis支持三種不同的模式: #no:不要立刻刷,只有在操作系統需要刷的時候再刷。比較快。 #always:每次寫操作都立刻寫入到aof文件。慢,但是最安全。 #everysec:每秒寫一次。折中方案。 #默認的 “everysec” 通常來說能在速度和數據安全性之間取得比較好的平衡。 appendfsync everysec

#如果AOF的同步策略設置成 “always” 或者 “everysec”,並且後臺的存儲進程(後臺存儲或寫入AOF 日誌)會產生很多磁盤I/O開銷。某些Linux的配置下會使Redis因爲 fsync()系統調用而阻塞很久。 #注意,目前對這個情況還沒有完美修正,甚至不同線程的 fsync() 會阻塞我們同步的write(2)調用。 #爲了緩解這個問題,可以用下面這個選項。它可以在 BGSAVE 或 BGREWRITEAOF 處理時阻止fsync()。 #這就意味着如果有子進程在進行保存操作,那麼Redis就處於"不可同步"的狀態。 #這實際上是說,在最差的情況下可能會丟掉30秒鐘的日誌數據。(默認Linux設定) #如果把這個設置成"yes"帶來了延遲問題,就保持"no",這是保存持久數據的最安全的方式。 no-appendfsync-on-rewrite no

#自動重寫AOF文件。如果AOF日誌文件增大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動重寫AOF日誌文件。 #工作原理:Redis記住上次重寫時AOF文件的大小(如果重啓後還沒有寫操作,就直接用啓動時的AOF大小) #這個基準大小和當前大小做比較。如果當前大小超過指定比例,就會觸發重寫操作。 #你還需要指定被重寫日誌的最小尺寸,這樣避免了達到指定百分比但尺寸仍然很小的情況還要重寫。 #指定百分比爲0會禁用AOF自動重寫特性。

auto-aof-rewrite-percentage 100 #文件達到大小閾值的時候進行重寫 auto-aof-rewrite-min-size 64mb

#如果設置爲yes,如果一個因異常被截斷的AOF文件被redis啓動時加載進內存,redis將會發送日誌通知用戶 #如果設置爲no,erdis將會拒絕啓動。此時需要用"redis-check-aof"工具修復文件。

aof-load-truncated yes

#加載時Redis識別出AOF文件以“REDIS”開頭字符串, #並加載帶此前綴的RDB文件,然後繼續加載AOF aof-use-rdb-preamble yes

Lua腳本配置

#Lua 腳本的最大執行毫秒數

lua-time-limit 5000

集羣

#開啓redis集羣 #cluster-enabled yes

#配置redis自動生成的集羣配置文件名。確保同一系統中運行的各redis實例該配置文件不要重名。 #cluster-config-file nodes-6379.conf

#集羣節點超時毫秒數 #cluster-node-timeout 15000

#如果數據太舊,集羣中的不可用master的slave節點會避免成爲備用master。如果slave和master失聯時間超過:(node-timeout * slave-validity-factor) + repl-ping-slave-period則不會被提升爲master。 #如node-timeout爲30秒,slave-validity-factor爲10, 默認default repl-ping-slave-period爲10秒,失聯時間超過310秒slave就不會成爲master。 #較大的slave-validity-factor值可能允許包含過舊數據的slave成爲master,同時較小的值可能會阻止集羣選舉出新master。 #爲了達到最大限度的高可用性,可以設置爲0,即slave不管和master失聯多久都可以提升爲master #cluster-replica-validity-factor 10

#只有在之前master有其它指定數量的工作狀態下的slave節點時,slave節點才能提升爲master。默認爲1(即該集羣至少有3個節點,1 master+2 slaves,master宕機,仍有另外1個slave的情況下其中1個slave可以提升) #測試環境可設置爲0,生成環境中至少設置爲1 #cluster-migration-barrier 1

#默認情況下如果redis集羣如果檢測到至少有1個hash slot不可用,集羣將停止查詢數據。 #如果所有slot恢復則集羣自動恢復。 #如果需要集羣部分可用情況下仍可提供查詢服務,設置爲no。 #cluster-require-full-coverage yes

#選項設置爲yes時,會阻止replicas嘗試對其master在主故障期間進行故障轉移 #然而,master仍然可以執行手動故障轉移,如果強制這樣做的話。 #cluster-replica-no-failover no

Docker集羣配置

#默認情況下,Redis會自動檢測自己的IP和從配置中獲取綁定的PORT,告訴客戶端或者是其他節點。 #而在Docker環境中,如果使用的不是host網絡模式,在容器內部的IP和PORT都是隔離的,那麼客戶端和其他節點無法通過節點公佈的IP和PORT建立連接。 #如果開啓以下配置,Redis節點會將配置中的這些IP和PORT告知客戶端或其他節點。而這些IP和PORT是通過Docker轉發到容器內的臨時IP和PORT的。 #cluster-announce-ip #cluster-announce-port #集羣總線端口 #cluster-announce-bus-port

慢查詢日誌

#記錄超過多少微秒的查詢命令 #1000000等於1秒,設置爲0則記錄所有命令 slowlog-log-slower-than 10000

#記錄大小,可通過SLOWLOG RESET命令重置 slowlog-max-len 128

延時監控系統

#記錄執行時間大於或等於預定時間(毫秒)的操作,爲0時不記錄

latency-monitor-threshold 0

事件通知

#Redis能通知 Pub/Sub 客戶端關於鍵空間發生的事件,默認關閉 notify-keyspace-events “”

內部數據結構

#當hash只有少量的entry時,並且最大的entry所佔空間沒有超過指定的限制時,會用一種節省內存的 #數據結構來編碼。可以通過下面的指令來設定限制 hash-max-ziplist-entries 512 hash-max-ziplist-value 64

#當取正值的時候,表示按照數據項個數來限定每個quicklist節點上的ziplist長度。比如,當這個參數配置 #成5的時候,表示每個quicklist節點的ziplist最多包含5個數據項。 #當取負值的時候,表示按照佔用字節數來限定每個quicklist節點上的ziplist長度。這時,它只能取-1到-5 #這五個值,每個值含義如下: #-5: 每個quicklist節點上的ziplist大小不能超過64 Kb。(注:1kb => 1024 bytes) #-4: 每個quicklist節點上的ziplist大小不能超過32 Kb。 #-3: 每個quicklist節點上的ziplist大小不能超過16 Kb。 #-2: 每個quicklist節點上的ziplist大小不能超過8 Kb。(-2是Redis給出的默認值) #-1: 每個quicklist節點上的ziplist大小不能超過4 Kb。 list-max-ziplist-size -2

#這個參數表示一個quicklist兩端不被壓縮的節點個數。 #注:這裏的節點個數是指quicklist雙向鏈表的節點個數,而不是指ziplist裏面的數據項個數。 #實際上,一個quicklist節點上的ziplist,如果被壓縮,就是整體被壓縮的。 #參數list-compress-depth的取值含義如下: #0: 是個特殊值,表示都不壓縮。這是Redis的默認值。 #1: 表示quicklist兩端各有1個節點不壓縮,中間的節點壓縮。 #2: 表示quicklist兩端各有2個節點不壓縮,中間的節點壓縮。 #3: 表示quicklist兩端各有3個節點不壓縮,中間的節點壓縮。 #依此類推… #由於0是個特殊值,很容易看出quicklist的頭節點和尾節點總是不被壓縮的,以便於在表的兩端進行快速存取。 list-compress-depth 0

#set有一種特殊編碼的情況:當set數據全是十進制64位有符號整型數字構成的字符串時。 #下面這個配置項就是用來設置set使用這種編碼來節省內存的最大長度。 set-max-intset-entries 512

#與hash和list相似,有序集合也可以用一種特別的編碼方式來節省大量空間。 #這種編碼只適合長度和元素都小於下面限制的有序集合 zset-max-ziplist-entries 128 zset-max-ziplist-value 64

#HyperLogLog稀疏結構表示字節的限制。該限制包括 #16個字節的頭。當HyperLogLog使用稀疏結構表示 #這些限制,它會被轉換成密度表示。 #值大於16000是完全沒用的,因爲在該點 #密集的表示是更多的內存效率。 #建議值是3000左右,以便具有的內存好處, 減少內存的消耗 hll-sparse-max-bytes 3000

#Streams宏節點最大大小/項目。流數據結構是基數編碼內部多個項目的大節點樹。使用此配置 #可以配置單個節點的字節數,以及切換到新節點之前可能包含的最大項目數 #追加新的流條目。如果以下任何設置設置爲0,忽略限制,因此例如可以設置一個 #大入口限制將max-bytes設置爲0,將max-entries設置爲所需的值 stream-node-max-bytes 4096 stream-node-max-entries 100

#啓用哈希刷新,每100個CPU毫秒會拿出1個毫秒來刷新Redis的主哈希表(頂級鍵值映射表) activerehashing yes

#客戶端的輸出緩衝區的限制,可用於強制斷開那些因爲某種原因從服務器讀取數據的速度不夠快的客戶端 client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60

#客戶端查詢緩衝區累積新命令。它們僅限於固定的默認情況下, #多數情況下爲了避免協議不同步導致客戶端查詢緩衝區中未綁定的內存使用量的錯誤 #但是,如果你有使用的話,你可以在這裏配置它,比如我們有很多執行請求或類似的。 #client-query-buffer-limit 1gb

#在Redis協議中,批量請求,即表示單個的元素strings,通常限制爲512 MB。 #但是,您可以z更改此限制 #proto-max-bulk-len 512mb

#默認情況下,“hz”的被設定爲10。提高該值將在Redis空閒時使用更多的CPU時,但同時當有多個key #同時到期會使Redis的反應更靈敏,以及超時可以更精確地處理 hz 10

#開啓動態hz dynamic-hz yes

#當一個子進程重寫AOF文件時,如果啓用下面的選項,則文件每生成32M數據會被同步 aof-rewrite-incremental-fsync yes

#當redis保存RDB文件時,如果啓用了以下選項,每生成32 MB數據,文件將被fsync-ed。 #這很有用,以便以遞增方式將文件提交到磁盤並避免大延遲峯值。 rdb-save-incremental-fsync yes

碎片整理

#啓用主動碎片整理 #activedefrag yes

#啓動活動碎片整理的最小碎片浪費量 #active-defrag-ignore-bytes 100mb

#啓動碎片整理的最小碎片百分比 #active-defrag-threshold-lower 10

#使用最大消耗時的最大碎片百分比 #active-defrag-threshold-upper 100

#在CPU百分比中進行碎片整理的最小消耗 #active-defrag-cycle-min 5

#磁盤碎片整理的最大消耗 #active-defrag-cycle-max 75

#將從主字典掃描處理的最大set / hash / zset / list字段數 #active-defrag-max-scan-fields 1000

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章