天天看點

redis.conf參數配置檔案詳解

本文将按照不同功能子產品的方式,依次對各個功能子產品的配置參數進行詳細介紹。

./redis-server /path/to/redis.conf 按照指定的配置檔案啟動 

include /path/to/other.conf 包含其它的redis配置檔案 

daemonize yes 啟用背景守護程序運作模式 

pidfile /var/run/redis.pid redis啟動後的程序ID儲存檔案 

port 6379 指定使用的端口号 

bind IP 監聽指定的網絡接口 

unixsocket /tmp/redis.sock 指定監聽的socket,适用于unix環境 

timeout N 用戶端空閑N秒後斷開連接配接,參數0表示不啟用 

loglevel notice 指定伺服器資訊顯示的等級,4個參數分别為debug\verbose\notice\warning 

logfile “” 指定日志檔案,預設是使用系統的标準輸出 

syslog-enabled no 是否啟用将記錄記載到系統日志功能,預設為不啟用 

syslog-ident redis 若啟用日志記錄,則需要設定日志記錄的身份 

syslog-facility local0 若啟用日志記錄,則需要設定日志facility,可取值範圍為local0~local7,表示不同的日志級别 

databases 16 設定資料庫的數量,預設啟動時使用DB0,使用“<code>select &lt;dbid&gt;</code>”可以更換資料庫 

tcp-backlog 511 此參數确定TCP連接配接中已完成隊列(3次握手之後)的長度,應小于Linux系統的/proc/sys/net/core/somaxconn的值,此選項預設值為511,而Linux的somaxconn預設值為128,當并發量比較大且用戶端反應緩慢的時候,可以同時提高這兩個參數。 

tcp-keepalive 0 指定ACKs的時間周期,機關為秒,值非0的情況表示将周期性的檢測用戶端是否可用,預設值為60秒。

資料儲存頻率: 

save 900 1 900秒後儲存,至少有1個key被更改時才會觸發 

save 300 10 300秒後儲存,至少有10個key被更改時才會觸發 

save 60 10000 60秒後儲存,至少有10000個key被更改時才會觸發

stop-writes-on-bgsave-error yes 最近一次save操作失敗則停止寫操作 

rdbcompression yes 啟用壓縮 

rdbchecksum yes 啟用CRC64校驗碼,當然這個會影響一部份性能 

dbfilename dump.rdb 指定存儲資料的檔案名 

dir ./ 指定工作目錄,rdb檔案和aof檔案都會存放在這個目錄中,預設為目前目錄

requirepass foobared 有slave端連接配接時是否需要密碼驗證

maxclients 10000 同一時間内最大clients連接配接的數量,超過數量的連接配接會傳回一個錯誤資訊 

<code>maxmemory &lt;bytes&gt;</code> 設定最大記憶體 

如果記憶體使用量到達了最大記憶體設定,有6種處理方法:

預設的設定是 maxmemory-policy noeviction 

appendonly yes 啟用AOF模式 

appendfilename “appendonly.aof” 設定AOF記錄的檔案名

向磁盤進行資料刷寫的頻率,有3個選項: 

always 有新資料則馬上刷寫,速度慢但可靠性高 

everysec 每秒鐘刷寫一次,折衷方法,所謂的redis可以隻丢失1秒鐘的資料就是源于此處 

no 按照OS自身的刷寫政策來進行,速度最快 

使用選項來進行設定 appendfsync everysec

no-appendfsync-on-rewrite no 當主程序在進行向磁盤的寫操作時,将會阻止其它的fsync調用 

auto-aof-rewrite-percentage 100 aof檔案觸發自動rewrite的百分比,值為0則表示禁用自動rewrite 

auto-aof-rewrite-min-size 64mb aof檔案觸發自動rewrite的最小檔案size 

aof-load-truncated yes 是否加載不完整的aof檔案來進行啟動

lua-time-limit 5000 設定lua腳本的最大運作時間,機關為毫秒

notify-keyspace-events “” 事件通知,預設不啟用,具體參數檢視配置檔案

Redis的主從複制采用異步的方式進行。 

如果同步連接配接時slave端短暫的與master端斷開了連接配接,那連接配接恢複後允許slave端與master端進行一次局部的再同步。 

主從複制是自動進行的,并不需要使用者的介入,slave端會自動嘗試重連master并進行資料同步。 

<code>slaveof &lt;master ip&gt; &lt;master port&gt;</code> 設定master端的IP與端口資訊 

<code>masterauth &lt;master-password&gt;</code> 如果master端啟用了密碼保護(requirepass),那slave端就需要配置此選項 

slave-serve-stale-data yes 當slave端在主從複制的過程中與master端斷開了連接配接,此時有2種處理方法:一種是繼續提供服務即使資料可能不是最新的,另一種是對請求傳回一個錯誤資訊,預設配置是繼續提供服務 

slave-read-only yes 自redis 2.6版本開始,slave端預設為readonly

主從同步支援兩種政策,即disk和socket方式(socket方式尚不完善,還處于實驗階段)。 

新的slave端和重連的salve端不允許去繼續同步程序,這被稱之為“完全同步”。 

一個RDB檔案從master端傳到slave端,分為兩種情況: 

1、支援disk:master端将RDB file寫到disk,稍後再傳送到slave端; 

2、無磁盤diskless:master端直接将RDB file傳到slave socket,不需要與disk進行互動。 

無磁盤diskless方式适合磁盤讀寫速度慢但網絡帶寬非常高的環境。 

repl-diskless-sync no 預設不使用diskless同步方式 

repl-diskless-sync-delay 5 無磁盤diskless方式在進行資料傳遞之前會有一個時間的延遲,以便slave端能夠進行到待傳送的目标隊列中,這個時間預設是5秒 

repl-ping-slave-period 10 slave端向server端發送pings的時間區間設定,預設為10秒 

repl-timeout 60 設定逾時時間 

repl-disable-tcp-nodelay no 是否啟用TCP_NODELAY,如果啟用則會使用少量的TCP包和帶寬去進行資料傳輸到slave端,當然速度會比較慢;如果不啟用則傳輸速度比較快,但是會占用比較多的帶寬。 

repl-backlog-size 1mb 設定backlog的大小,backlog是一個緩沖區,在slave端失連時存放要同步到slave的資料,是以當一個slave要重連時,經常是不需要完全同步的,執行局部同步就足夠了。backlog設定的越大,slave可以失連的時間就越長。 

repl-backlog-ttl 3600 如果一段時間後沒有slave連接配接到master,則backlog size的記憶體将會被釋放。如果值為0則表示永遠不釋放這部份記憶體。 

slave-priority 100 slave端的優先級設定,值是一個整數,數字越小表示優先級越高。當master故障時将會按照優先級來選擇slave端進行恢複,如果值設定為0,則表示該slave永遠不會被選擇。 

min-slaves-to-write 3 

min-slaves-max-lag 10 設定當一個master端的可用slave少于N個,延遲時間大于M秒時,不接收寫操作。

一個正常的redis執行個體是不能做為一個redis叢集的節點的,除非它是以一個叢集節點的方式進行啟動。 

cluster-enabled yes 配置redis做為一個叢集節點來啟動 

cluster-config-file node-6379.conf 每個叢集節點都有一個叢集配置檔案,這個檔案不需要編輯,它由redis節點來建立和更新。每個redis節點的叢集配置檔案不可以相同。 

cluster-node-timeout 15000 設定叢集節點逾時時間,如果超過了指定的逾時時間後仍不可達,則節點被認為是失敗狀态,機關為毫秒。

一個屬于失效的master端的slave,如果它的資料較舊,将不會啟動failover。 

現在來講并沒有一個簡單的方法去解決如何判定一個slave端的資料的時效性問題,是以可以執行以下兩個選擇: 

1、如果有多個slave可用于failover,它們會交換資訊以便選出一個最優的進行主從複制的offset,slave端會嘗試依據offset去擷取每個slave的rank,這樣在啟動failover時對每個slave的利用就與slave端的rank成正比。 

2、每個slave端和它的master端進行最後互動的時間,這可能是最近的ping或指令接收時間,或自與master端失連的過時時間。如果最近的互動時間太久,slave就不會嘗試去進行failover。 

第2點可以由使用者來進行調整,明确一個slave不會進行failover。自最近一次與master端進行互動,過時時間有一個計算公式: 

(node-timeout * slave-validity-factor)+repl-ping-slave-period 

一個比較大的slave-validity-factor參數能夠允許slave端使用比較舊的資料去failover它的master端,而一個比較小的值可能會阻止叢集去選擇slave端。 

為獲得最大的可用性,可以設定slave-validity-factor的值為0,這表示slave端将會一直去嘗試failover它的master端而不管它與master端的最後互動時間。 

cluster-slave-validity-factor 10 預設值為10

叢集中的slave可以遷移到那些沒有可用slave的master端,這提升了叢集處理故障的能力。畢竟一個沒有slave的master端如果發生了故障是沒有辦法去進行failover的。 

要将一個slave遷移到别的master,必須這個slave的原master端有至少給定數目的可用slave才可以進行遷移,這個給定的數目由migration barrier參數來進行設定,預設值為1,表示這個要進行遷移的slave的原master端應該至少還有1個可用的slave才允許其進行遷移,要禁用這個功能隻需要将此參數設定為一個非常大的值。 

cluster-migration-barrier 1

預設情況下當redis叢集節點發現有至少一個hashslot未被covered時将會停止接收查詢。 

這種情況下如果有一部份的叢集down掉了,那整個叢集将變得不可用。 

叢集将會在所有的slot重新covered之後自動恢複可用。 

若想要設定叢集在部份key space沒有cover完成時繼續去接收查詢,就将參數設定為no。 

cluster-require-full-coverage yes

redis的slow log是一個系統OS進行的記錄查詢,它是超過了指定的執行時間的。執行時間不包括類似與client進行互動或發送回複等I/O操作,它隻是實際執行指令的時間。 

有2個參數可以配置,一個用來告訴redis執行時間,這個時間是微秒級的(1秒=1000000微秒),這是為了不遺漏指令。另一個參數是設定slowlog的長度,當一個新的指令被記錄時,最舊的指令将會從指令記錄隊列中移除。 

slowlog-log-slower-than 10000 

slowlog-max-len 128 

可以使用“slowlog reset”指令來釋放slowlog占用的記憶體。

latency-monitor-threshold 0 延遲監控,用于記錄等于或超過了指定時間的操作,預設是關閉狀态,即值為0。

hash-max-ziplist-entries 512 

hash-max-ziplist-value 64

與哈希類似,少量的lists也會通過一個指定的方式去編碼進而節省更多的空間,它的閥值通過以下參數來進行配置。 

list-max-ziplist-entries 512 

list-max-ziplist-value 64

集合sets在一種特殊的情況時有指定的編碼方式,這種情況是集合由一組10進制的64位有符号整數範圍内的數字組成的情況。以下選項可以設定集合使用這種特殊編碼方式的size限制。 

set-max-intset-entries 512

與哈希和清單類似,有序集合也會使用一種特殊的編碼方式來節省空間,這種特殊的編碼方式隻用于這個有序集合的長度和元素均低于以下參數設定的值時。 

zset-max-ziplist-entries 128 

zset-max-ziplist-value 64

hll-sparse-max-bytes 3000 設定HyeperLogLog的位元組數限制,這個值通常在0~15000之間,預設為3000,基本不超過16000 

activerehashing yes redis将會在每秒中抽出10毫秒來對主字典進行重新散列化處理,這有助于盡可能的釋放記憶體

因為某些原因,client不能足夠快的從server讀取資料,那client的輸出緩存限制可能會使client失連,這個限制可用于3種不同的client種類,分别是:normal、slave和pubsub。 

進行設定的格式如下:

如果達到hard limit那client将會立即失連。 

如果達到soft limit那client将會在soft seconds秒之後失連。 

參數soft limit &lt; hard limit。 

client-output-buffer-limit normal 0 0 0 

client-output-buffer-limit slave 256mb 64mb 60 

client-output-buffer-limit pubsub 32mb 8mb 60

redis使用一個内部程式來處理背景任務,例如關閉逾時的client連接配接,清除過期的key等等。它并不會同時處理所有的任務,redis通過指定的hz參數去檢查和執行任務。 

hz預設設為10,提高它的值将會占用更多的cpu,當然相應的redis将會更快的處理同時到期的許多key,以及更精确的去處理逾時。 

hz的取值範圍是1~500,通常不建議超過100,隻有在請求延時非常低的情況下可以将值提升到100。 

hz 10

當一個子程序要改寫AOF檔案,如果以下選項啟用,那檔案将會在每産生32MB資料時進行同步,這樣送出增量檔案到磁盤時可以避免出現比較大的延遲。 

aof-rewrite-incremental-fsync yes

     本文轉自yzy121403725 51CTO部落格,原文連結:<b>http://blog.51cto.com/lookingdream/1883867</b>,如需轉載請自行聯系原作者