1. 程式人生 > >redis3.0.0配置檔案詳解

redis3.0.0配置檔案詳解

下面是redis3.0.0自帶配置檔案的預設配置,包括了大部分配置項,配置項和值是成對出現的,比如1)是配置引數,2)則是1)的值。


127.0.0.1:6379> config get *
  1) "dbfilename"   

rdb檔案的名稱,可以動態修改
  2) "dump.rdb"
  3) "requirepass"  

requirepass配置可以讓使用者使用AUTH命令來認證密碼,才能使用其他命令。可以動態修改
  4) ""
  5) "masterauth"  

如果master設定了requirepass,那麼slave要連上master,需要有master的密碼才行。masterauth就是用來配置master的密碼,這樣可以在連上master後進行認證。可以動態修改
  6) ""
  7) "unixsocket"   

配置unix socket來讓redis支援監聽本地連線,不可以動態修改
  8) ""
  9) "logfile"          

指定了記錄日誌的檔案。空字串的話,日誌會列印到標準輸出裝置。後臺執行的redis標準輸出是/dev/null。不可以動態修改。
 10) ""
 11) "pidfile"         

redis使用守護程序執行的時候儲存的pid檔案,不可以動態修改
 12) "/var/run/redis.pid"
 13) "maxmemory"  

redis配置的最大記憶體容量。為0表示沒有記憶體上限。slave的輸出緩衝區是不計算在maxmemory內的。可以動態修改
 14) "0"
 15) "maxmemory-samples"

 

lru檢測的樣本數。使用lru或者ttl淘汰演算法,從需要淘汰的列表中隨機選擇sample個key,選出閒置時間最長的key移除。可以動態修改
 16) "5"
 17) "timeout"                   

此引數為設定客戶端空閒超過timeout,服務端會斷開連線,為0則服務端不會主動斷開連線,不能小於0,可以動態修改
 18) "0"
 19) "tcp-keepalive"  

tcp keepalive引數。如果設定不為0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有兩個好處:檢測掛掉的對端。降低中間裝置出問題而導致網路看似連線卻已經與對端埠的問題。在Linux核心中,設定了keepalive,redis會定時給對端傳送ack。檢測到對端關閉需要兩倍的設定值。可以動態修改。
 20) "0"
 21) "auto-aof-rewrite-percentage"

 

aof自動重寫配置。當aof檔案增長到一定大小的時候Redis能夠呼叫 bgrewriteaof 對日誌檔案進行重寫。Redis會記住上次進行些日誌後文件的大小。基礎大小會同現在的大小進行比較。如果現在的大小比基礎大小大制定的百分比,重寫功能將啟動。同時需要指定一個最小大小用於aof重寫,這個用於阻止即使檔案很小但是增長幅度很大也去重寫aof檔案的情況。可以動態設定
 22) "100"
 23) "auto-aof-rewrite-min-size"  

aof自動重寫配置。需要同時滿足aof檔案大小大於auto-aof-rewrite-min-size和增長率大於auto-aof-rewrite-percentage才能重寫。可以動態設定
 24) "67108864"
 25) "hash-max-ziplist-entries"  

資料量小於等於hash-max-ziplist-entries的用ziplist,大於hash-max-ziplist-entries用hash。
 26) "512"
 27) "hash-max-ziplist-value"    

value大小小於等於hash-max-ziplist-value的用ziplist,大於hash-max-ziplist-value用hash。
 28) "64"
 29) "list-max-ziplist-entries"      

資料量小於等於list-max-ziplist-entries用ziplist,大於list-max-ziplist-entries用list。
 30) "512"
 31) "list-max-ziplist-value"        

value大小小於等於list-max-ziplist-value的用ziplist,大於list-max-ziplist-value用list。
 32) "64"
 33) "set-max-intset-entries"     

資料量小於等於set-max-intset-entries用iniset,大於set-max-intset-entries用set。
 34) "512"
 35) "zset-max-ziplist-entries"  

資料量小於等於zset-max-ziplist-entries用ziplist,大於zset-max-ziplist-entries用zset。
 36) "128"
 37) "zset-max-ziplist-value"    

value大小小於等於zset-max-ziplist-value用ziplist,大於zset-max-ziplist-value用zset。
 38) "64"
 39) "hll-sparse-max-bytes"     

value大小小於等於hll-sparse-max-bytes使用稀疏資料結構(sparse),大於hll-sparse-max-bytes使用稠密的資料結構(dense)。一個比16000大的value是幾乎沒用的,建議的value大概為3000。如果對CPU要求不高,對空間要求較高的,建議設定到10000左右。
 40) "3000"
 41) "lua-time-limit"  

如果達到最大時間限制(毫秒),redis會記個log,然後返回error。當一個指令碼超過了最大時限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經呼叫了write,只能用第二個命令殺。可以動態修改
 42) "5000"
 43) "slowlog-log-slower-than"     

執行時間比slowlog-log-slower-than大的請求記錄到slowlog裡面,單位是微秒。可以動態修改。slowlog-max-len生產設定設定大於1024,因為slowlog會省略過多的引數,慢查詢不會佔用過多的記憶體;

 44) "10000"
 45) "latency-monitor-threshold"   

延遲監控功能是用來監控redis中執行比較緩慢的一些操作,用LATENCY列印redis例項在跑命令時的耗時圖表。只記錄大於等於下邊設定的值的操作。0的話,就是關閉監視。可以動態修改
 46) "0"
 47) "slowlog-max-len"  

記錄slowlog的最大長度,可以動態修改
 48) "128"
 49) "port"                         

redis監聽的埠號,不可以動態修改
 50) "6379"
 51) "tcp-backlog"  

在高吞吐環境下,你需要更高的backlog來避免緩慢的客戶端連線問題。tcp-backlog可能被Linux核心/proc/sys/net/core/somaxconn的值截斷。backlog取的是tcp-backlog和/proc/sys/net/core/somaxconn的更小值。不可以動態修改。
 52) "511"
 53) "databases"   

設定資料庫的數量,預設使用的資料庫是0。redis的cluster只能使用0號database,如果配置檔案中配置了多個database,還是隻能用0號,因此,和database選擇有關的select命令就不支援了

 54) "16"
 55) "repl-ping-slave-period"  

master給slave傳送ping命令的頻率,預設是10s發一個ping命令。可以動態修改
 56) "10"
 57) "repl-timeout"  

複製連結超時時間。master和slave都有超時時間的設定。master檢測到slave上次傳送傳送replconf命令的時間超過repl-timeout,即認為slave離線,清除該slave資訊。slave檢測到上次和master互動的時間超過repl-timeout,則認為master離線。需要注意的是repl-timeout需要設定一個比repl-ping-slave-period更大的值,不然會經常檢測到超時。
 58) "60"
 59) "repl-backlog-size" 

複製緩衝區大小,這是一個環形複製緩衝區,用來儲存最新複製的命令。這樣在slave離線的時候,不需要完全複製master的資料,如果可以執行部分同步,只需要把緩衝區的部分資料複製給slave,就能恢復正常複製狀態。緩衝區的大小越大,slave離線的時間可以更長,複製緩衝區只有在有slave連線的時候才分配記憶體。沒有slave的一段時間,記憶體會被釋放出來。可以動態修改。repl-backlog-size是server共享的,建議大於100mb,這樣出現網路閃斷,或超時複製中斷時,Slave較大可能使用“部分同步”,減少全量同步的影響

 60) "1048576"
 61) "repl-backlog-ttl"  

master沒有slave一段時間會釋放複製緩衝區的記憶體,repl-backlog-ttl用來設定該時間長度。單位為秒。可以動態修改
 62) "3600"
 63) "maxclients"   

設定能連上redis的最大客戶端連線數量。不區分連線是客戶端連線還是內部開啟檔案或者和slave連線等。可以動態修改
 64) "10000"
 65) "watchdog-period"  

Watchdog還是一個實驗性功能,開啟它可能會對資料產生影響,所以建議在使用時做好資料備份。建議關閉 
 66) "0"
 67) "slave-priority"  

當master不可用,會根據slave的優先順序選舉一個master。最低的優先順序的slave,當選master。而配置成0,永遠不會被選舉。可以動態修改
 68) "100"
 69) "min-slaves-to-write" 

redis提供了可以讓master停止寫入的方式,如果配置了min-slaves-to-write,健康的slave的個數小於N,mater就禁止寫入。master最少得有多少個good的slave存活才能執行寫命令。這個配置雖然不能保證N個slave都一定能接收到master的寫操作,但是能避免沒有足夠good slave的時候,master不能寫入來避免資料丟失。可以動態修改
 70) "0"
 71) "min-slaves-max-lag"  

延遲小於min-slaves-max-lag的slave才認為是good slave。可以動態修改
 72) "10"
 73) "hz"    

適當調大hz的值,增大每秒定期刪除的次數;建議調整60,官方建議小100。redis定期刪除策略:Redis每秒呼叫10次(hz引數決定)activeExpireCycle函式,每次隨機獲取20個帶有生存時間的鍵,刪除其中已過期的鍵。適當調大hz的值,增大每秒定期刪除的次數;建議調整60,官方建議小100
redis定期刪除策略:Redis每秒呼叫10次(hz引數決定)activeExpireCycle函式,每次隨機獲取20個帶有生存時間的鍵,刪除其中已過期的鍵。
 74) "10"
 75) "cluster-node-timeout"         #節點超時多久則認為它宕機了。
 76) "15000"
 77) "cluster-migration-barrier"   

一個master可以擁有的最小slave數量。該項的作用是,當一個master沒有任何slave的時候,某些有富餘slave的master節點,可以自動的分一個slave給它。
 78) "1"
 79) "cluster-slave-validity-factor" 

如果設定成0,則無論從節點與主節點失聯多久,從節點都會嘗試升級成主節點。如果設定成正數,則cluster-node-timeout乘以cluster-slave-validity-factor得到的時間,是從節點與主節點失聯後,此從節點資料有效的最長時間,超過這個時間,從節點不會啟動故障遷移。假設cluster-node-timeout=5,cluster-slave-validity-factor=10,則如果從節點跟主節點失聯超過50秒,此從節點不能成為主節點。注意,如果此引數配置為非0,將可能出現由於某主節點失聯卻沒有從節點能頂上的情況,從而導致叢集不能正常工作,在這種情況下,只有等到原來的主節點重新迴歸到叢集,叢集才恢復運作。
 80) "10"
 81) "repl-diskless-sync-delay"  

diskless複製的延遲時間,防止設定為0。一旦複製開始,節點不會再接收新slave的複製請求直到下一個rdb傳輸。所以最好等待一段時間,等更多的slave連上來。可以動態修改
 82) "5"
 83) "cluster-require-full-coverage" 

只要有節點宕機導致16384個槽沒全被覆蓋,整個叢集就全部停止服務,建議設定為no。
 84) "yes"
 85) "no-appendfsync-on-rewrite"  

在aof重寫或者寫入rdb檔案的時候,會執行大量IO,此時對於everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite欄位預設設定為no。如果對延遲要求很高的應用,這個欄位可以設定為yes,否則還是設定為no,這樣對持久化特性來說是更安全的選擇。選擇no,意味著在子程序save的時候,fsync的策略相當於no。Linux的預設fsync策略是30秒。可能丟失30秒資料。可以動態修改
 86) "no"
 87) "slave-serve-stale-data"  

當從庫同主機失去連線或者複製正在進行,從機庫有兩種執行方式:

如果slave-serve-stale-data設定為yes(預設設定),從庫會繼續響應客戶端的請求。

如果slave-serve-stale-data設定為no,除去INFO和SLAVOF命令之外的任何請求都會返回一個錯誤"SYNC with master in progress"。可以動態修改
 88) "yes"
 89) "slave-read-only"  

slave是否只讀,預設slave是隻讀的。可以動態修改
 90) "yes"
 91) "stop-writes-on-bgsave-error"  

當RDB持久化出現錯誤後,是否依然進行繼續進行工作,yes:不能進行工作,no:可以繼續進行工作,可以動態修改
 92) "yes"
 93) "daemonize"   

redis是否後臺執行,不可以動態修改。建議修改為yes
 94) "no"
 95) "rdbcompression"  

使用壓縮rdb檔案,rdb檔案壓縮使用LZF壓縮演算法,yes:壓縮,但是需要一些cpu的消耗。no:不壓縮,需要更多的磁碟空間。可以動態修改
 96) "yes"
 97) "rdbchecksum"     

是否校驗rdb檔案。從rdb格式的第五個版本開始,在rdb檔案的末尾會帶上CRC64的校驗和。這跟有利於檔案的容錯性,但是在儲存rdb檔案的時候,會有大概10%的效能損耗,所以如果你追求高效能,可以關閉該配置。不可以動態修改
 98) "yes"
 99) "activerehashing" 

Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低記憶體的使用。當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。如果沒有這麼嚴格的實時性要求,可以設定為yes,以便能夠儘可能快的釋放記憶體。
100) "yes"
101) "repl-disable-tcp-nodelay" 

是否禁止複製tcp連結的tcp nodelay引數,可選擇yes或者no。預設是no,即使用tcp nodelay。如果master設定了yes來禁止tcp nodelay設定,在把資料複製給slave的時候,會減少包的數量和更小的網路頻寬。但是這也可能帶來資料的延遲。預設我們推薦更小的延遲,但是在資料量傳輸很大的場景下,建議選擇yes。可以動態修改
102) "no"
103) "repl-diskless-sync"  

是否使用socket方式複製資料。目前redis複製提供兩種方式,disk和socket。socket方式目前還處於實驗階段。如果新的slave連上來或者重連的slave無法部分同步,就會執行全量同步,master會生成rdb檔案,disk方式是master建立一個新的程序把rdb檔案儲存到磁碟,再把磁碟上的rdb檔案傳遞給slave。socket是master建立一個新的程序,直接把rdb檔案以socket的方式發給slave。dis方式的時候,當一個rdb儲存的過程中,多個slave都能共享這個rdb檔案。socket的方式就的一個個slave順序複製。在磁碟速度緩慢,網速快的情況下推薦用socket方式。可以動態修改
104) "no"
105) "aof-rewrite-incremental-fsync"  

在aof重寫的時候,如果打開了aof-rewrite-incremental-fsync開關,系統會每32MB執行一次fsync。這對於把檔案寫入磁碟是有幫助的,可以避免過大的延遲峰值。
106) "yes"
107) "aof-load-truncated"  

redis在啟動的時候可以載入被截斷的AOF檔案,預設啟用。可以動態修改
108) "yes"
109) "appendonly"   

預設redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可能有幾分鐘的資料丟失,根據save來策略進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的資料在接收後都寫入 appendonly.aof 檔案,每次啟動時Redis都會先把這個檔案的資料讀入記憶體裡,先忽略RDB檔案。可以動態修改
110) "no"
111) "dir"   

資料目錄,資料庫的寫入會在這個目錄。rdb、aof檔案也會寫在這個目錄。可以動態修改
112) "./"
113) "maxmemory-policy"  

記憶體容量超過maxmemory後的處理策略。
volatile-lru:利用LRU演算法移除設定過過期時間的key。
volatile-random:隨機移除設定過過期時間的key。
volatile-ttl:移除即將過期的key,根據最近過期時間來刪除(輔以TTL)。
allkeys-lru:利用LRU演算法移除任何key。
allkeys-random:隨機移除任何key。
noeviction:不移除任何key,只是返回一個寫錯誤。
114) "noeviction"
115) "appendfsync"  

aof持久化策略的配置
no表示不執行fsync,由作業系統保證資料同步到磁碟,速度最快。
always表示每次寫入都執行fsync,以保證資料同步到磁碟。
everysec表示每秒執行一次fsync,可能會導致丟失這1s資料。可以動態修改
116) "everysec"
117) "save"   

該命令可以把記憶體的資料儲存到硬碟。只要滿足在指定的seconds內,寫入命令個數大於changes,就會執行儲存操作。比如900秒內至少1個key值改變(則進行資料庫儲存--持久化),可以動態修改
118) "900 1 300 10 60 10000"
119) "loglevel"  

指定了服務端日誌的級別。包括:debug(很多資訊,方便開發、測試),verbose(許多有用的資訊,但是沒有debug級別資訊多),notice(適當的日誌級別,適合生產環境),warn(只有非常重要的資訊),可以動態修改。
120) "notice"
121) "client-output-buffer-limit"  
對客戶端輸出緩衝進行限制可以強迫那些不從伺服器讀取資料的客戶端斷開連線,用來強制關閉傳輸緩慢的客戶端。
對於normal client,第一個0表示取消hard limit,第二個0和第三個0表示取消soft limit,normal client預設取消限制,因為如果沒有尋問,他們是不會接收資料的。
client-output-buffer-limit normal 0 0 0
對於slave client和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那麼伺服器就會立即斷開客戶端連線。
client-output-buffer-limit slave 256mb 64mb 60
對於pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那麼伺服器就會立即斷開客戶端連線。
client-output-buffer-limit pubsub 32mb 8mb 60
122) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
123) "unixsocketperm"  

配置unix socket使用檔案的許可權,不可以動態修改
124) "0"
125) "slaveof"                

slave複製對應的master。可以動態修改
126) ""
127) "notify-keyspace-events"  

鍵空間通知使得客戶端可以通過訂閱頻道或模式,來接收那些以某種方式改動了 Redis 資料集的事件。因為開啟鍵空間通知功能需要消耗一些 CPU ,所以在預設配置下,該功能處於關閉狀態。notify-keyspace-events 的引數可以是以下字元的任意組合,它指定了伺服器該傳送哪些型別的通知:字元 傳送的通知
128) ""
129) "bind"          

指定redis只接收來自於該IP地址的請求,如果不進行設定,則監聽所有網路地址過來的連線,不可以動態修改
130) ""