天天看點

Redis3.2.8配置參數及說明

       http://8999a.blog.51cto.com/

Redis3.2.8配置參數及說明

bind 127.0.0.1

# 綁定的主機位址,不設定預設将處理所有請求

protected-mode yes

# 是否開啟保護模式,預設開啟,要是配置裡面沒有指定bind和密碼,開啟該參數後,redis隻會本地進行通路,

拒絕外部通路,要是開啟了密碼和bind,可以開啟,否則最好關閉,設定為no

port 6379

# 監聽的端口号

tcp-backlog 511

# 此參數确定了TCP連接配接中已完成隊列(完成三次握手之後)的長度,此值必須不大于linux系統定義的

/proc/sys/net/core/somaxconn值,預設是511,而linux的預設參數值是128,當系統并發量并且用戶端

速度緩慢的時候,可以将這兩個參數一起參考設定,該核心參數預設值一般是128,對于負載很大的程式來說

不能滿足,一般會将它修改為2048或者更大,在/etc/sysctl.conf中添加:net.core.somaxconn=2048,然後

使用:sysctl -p使該設定生效

timeout 0

# 當用戶端閑置多長時間後關閉連接配接,0,表示不限制

tcp-keepalive 300

# 如果設定不為0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有兩個好處:檢測挂掉的對端。

降低中間裝置出問題而導緻網絡看似連接配接卻已經與對端端口的問題。在Linux核心中,

設定了keepalive,redis會定時給對端發送ack。檢測到對端關閉需要兩倍的設定值。

daemonize yes

# 是否以守護程序的模式運作,當使用啟動腳本運作時,與此設定關系不大

supervised no

# 可以通過upstart和systemd管理Redis守護程序,這個參數是和具體的作業系統相關的

pidfile /var/run/redis_6379.pid

# 當redis以守護程序方式運作時,預設寫入pid的檔案及路徑

loglevel notice

# 日志級别,最好是warning

logfile /var/log/redis_6379.log

# 指定了記錄日志的檔案。空字元串的話,日志會列印到标準輸出裝置。背景運作的redis标準輸出是/dev/null

databases 16

# 資料庫的數量,預設使用的資料庫是DB 0。可以通過”SELECT “指令選擇一個db

save 900 1

# 900秒有一個key變化,就做一次儲存

save 300 10

# 300秒有十個key變化,就做一次儲存

save 60 10000

# 60秒有10000個key變化,就做一次儲存

stop-writes-on-bgsave-error yes

# 在出現錯誤的時候,是否要停止儲存

rdbcompression yes

# 使用壓縮rdb檔案,rdb檔案壓縮使用LZF算法,yes表示壓縮,但需要消耗CPU資源,no表示不壓縮,需要跟多磁盤空間

rdbchecksum yes

# 是否校驗rdb檔案的名稱,從rdb格式的第五個版本開始,在rdb檔案的末尾會帶上CRC64校驗和,這更有利于檔案的容錯,

但是在儲存rdb檔案的時候,會有大概10%的性能損耗,如果追求高性能,可關閉該配置

dbfilename dump.rdb

# rdb檔案的名稱

dir /var/lib/redis/6379

# 資料庫目錄,資料庫的寫入會在這個目錄,rdb、aof檔案也會寫在這個目錄

slave-serve-stale-data yes

# 當從庫同主機失去連接配接或者複制正在進行,從庫有兩種運作方式

(1)、預設yes,從庫會繼續相應用戶端的請求

(2)、no,除去INFO和SLAVOF指令之外的任何請求都會傳回一個錯誤"SYNC with master in progress"

slave-read-only yes

# yes開啟從庫隻讀

repl-diskless-sync no

# 是否使用socket方式複制資料,目前redis複制提供兩種凡是,disk和socket,如果新的slave連上來或者重連的slave

無法部分同步,就會執行全量同步,master會生成rdb檔案,有兩種方式:

(1)、disk方式是master建立一個新的程序把rdb檔案儲存到磁盤,再把磁盤上的rdb檔案傳送給slave

(2)、socket是master建立一個新的程序,直接把rdb檔案以socket的方式給slave

disk方式的時候當一個rdb儲存的過程中,多個slave都能共享這個rdb檔案,socket的方式就是一個個slave順序複制

在磁盤速度緩慢,網速快的情況下建議使用socket方式

repl-diskless-sync-delay 5

# diskless複制的延遲時間,防止設定為0,一旦開始複制,節點不會再接受新的slave的複制請求,直到下一個rdb傳輸,

是以最好等待一段時間,等更多的slave連上來

repl-disable-tcp-nodelay no

# 是否禁止複制tcp連結的tcp nodelay參數,可傳遞yes或者no。預設是no,即使用tcp nodelay。如果master設定了yes

來禁止tcp nodelay設定,在把資料複制給slave的時候,會減少包的數量和更小的網絡帶寬。但是這也可能帶來資料的延遲。

預設我們推薦更小的延遲,但是在資料量傳輸很大的場景下,建議選擇yes。

slave-priority 100

# 當master不可用,Sentinel會根據slave的優先級選舉一個master。最低的優先級的slave,當選master。而配置成0,永遠不會被選舉。

appendonly no

# 預設redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途當機,會導緻可能有幾分鐘的資料丢失,

根據save來政策進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的資料在接收後

都寫入 appendonly.aof 檔案,每次啟動時Redis都會先把這個檔案的資料讀入記憶體裡,先忽略RDB檔案

appendfilename "appendonly.aof"

# aof檔案名

appendfsync everysec

# aof持久化政策的配置

(1)、no表示不執行fsync,由作業系統保證資料同步到磁盤,速度最快。

(2)、always表示每次寫入都執行fsync,以保證資料同步到磁盤。

(3)、everysec表示每秒執行一次fsync,可能會導緻丢失這1s資料。

no-appendfsync-on-rewrite no

# 在aof重寫或者寫入rdb檔案的時候,會執行大量IO,此時對于everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,

no-appendfsync-on-rewrite字段設定為預設設定為no。如果對延遲要求很高的應用,這個字段可以設定為yes,否則還是設定為no,

這樣對持久化特性來說這是更安全的選擇。設定為yes表示rewrite期間對新寫操作不fsync,暫時存在記憶體中,等rewrite完成後再寫入,

預設為no,建議yes。Linux的預設fsync政策是30秒。可能丢失30秒資料。

auto-aof-rewrite-percentage 100

# aof自動重寫配置。當目前aof檔案大小超過上一次重寫的aof檔案大小的百分之多少進行重寫,即當aof檔案增長到一定大小的時候

Redis能夠調用bgrewriteaof對日志檔案進行重寫。目前AOF檔案大小是上次日志重寫得到AOF檔案大小的二倍(設定為100)時,

自動啟動新的日志重寫過程。

auto-aof-rewrite-min-size 64mb

# 設定允許重寫的最小aof檔案大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫

aof-load-truncated yes

# aof檔案可能在尾部是不完整的,當redis啟動的時候,aof檔案的資料被載入記憶體。重新開機可能發生在redis所在的主機作業系統當機後,

尤其在ext4檔案系統沒有加上data=ordered選項(redis當機或者異常終止不會造成尾部不完整現象)出現這種現象,可以選擇讓redis退出,

或者導入盡可能多的資料。如果選擇的是yes,當截斷的aof檔案被導入的時候,會自動釋出一個log給用戶端然後load。

如果是no,使用者必須手動redis-check-aof修複AOF檔案才可以

lua-time-limit 5000

# 如果達到最大時間限制(毫秒),redis會記個log,然後傳回error。當一個腳本超過了最大時限。隻有SCRIPT KILL和SHUTDOWN NOSAVE可以用。

第一個可以殺沒有調write指令的東西。要是已經調用了write,隻能用第二個指令殺。

slowlog-log-slower-than 10000

# slowlog是用來記錄redis運作中執行比較慢的指令耗時。當指令的執行超過了指定時間,就記錄在slowlog中,slowlog儲存在記憶體中,是以沒有IO操作。

執行時間比slowlog-log-slower-than大的請求記錄到slowlog裡面,機關是微秒,是以1000000就是1秒。注意,負數時間會禁用慢查詢日志,而0則會強制記錄所有指令。

slowlog-max-len 128

# 慢查詢日志長度。當一個新的指令被寫進日志的時候,最老的那個記錄會被删掉。這個長度沒有限制。隻要有足夠的記憶體就行。你可以通過 SLOWLOG RESET 來釋放記憶體。

latency-monitor-threshold 0

# 延遲監控功能是用來監控redis中執行比較緩慢的一些操作,用LATENCY列印redis執行個體在跑指令時的耗時圖表。隻記錄大于等于下邊設定的值的操作。

0的話,就是關閉監視。預設延遲監控功能是關閉的,如果你需要打開,也可以通過CONFIGSET指令動态設定。

notify-keyspace-events ""

# 鍵空間通知使得用戶端可以通過訂閱頻道或模式,來接收那些以某種方式改動了Redis 資料集的事件。因為開啟鍵空間通知功能需要消耗一些 CPU ,是以在預設配置下,該功能處于關閉狀态。

# notify-keyspace-events的參數可以是以下字元的任意組合,它指定了伺服器該發送哪些類型的通知:

# K 鍵空間通知,所有通知以 __keyspace@__ 為字首

# E 鍵事件通知,所有通知以 __keyevent@__ 為字首

# g DEL 、 EXPIRE 、RENAME 等類型無關的通用指令的通知

# $ 字元串指令的通知

# l 清單指令的通知

# s 集合指令的通知

# h 哈希指令的通知

# z 有序集合指令的通知

# x 過期事件:每當有過期鍵被删除時發送

# e 驅逐(evict)事件:每當有鍵因為 maxmemory 政策而被删除時發送

# A 參數 g$lshzxe 的别名

# 輸入的參數中至少要有一個K或者E,否則的話,不管其餘的參數是什麼,都不會有任何 通知被分發。詳細使用可以參考http://redis.io/topics/notifications

hash-max-ziplist-entries 512

# 資料量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash

hash-max-ziplist-value 64

# value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash。

list-max-ziplist-size -2

# The highestperforming option is usually -2 (8 Kb size) or -1 (4 Kb size),

# but if your use caseis unique, adjust the settings as necessary.

list-compress-depth 0

set-max-intset-entries 512

# 資料量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set。

zset-max-ziplist-entries 128

# 資料量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset。

zset-max-ziplist-value 64

# value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset。

hll-sparse-max-bytes 3000

# value大小小于等于hll-sparse-max-bytes使用稀疏資料結構(sparse),大于hll-sparse-max-bytes使用稠密的資料結構(dense)。

一個比16000大的value是幾乎沒用的,建議的value大概為3000。如果對CPU要求不高,對空間要求較高的,建議設定到10000左右。

activerehashing yes

# Redis将在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低記憶體的使用。當你的使用場景中,有非常嚴格的實時性需要,

不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。如果沒有這麼嚴格的實時性要求,可以設定為yes,以便能夠盡可能快的釋放記憶體。

client-output-buffer-limit normal 0 0 0

# 對用戶端輸出緩沖進行限制可以強迫那些不從伺服器讀取資料的用戶端斷開連接配接,用來強制關閉傳輸緩慢的用戶端。

# 對于normalclient,第一個0表示取消hard limit,第二個0和第三個0表示取消soft limit,normal client預設取消限制,因為如果沒有尋問,他們是不會接收資料的。

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

# 對于slaveclient和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那麼伺服器就會立即斷開用戶端連接配接。

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

# 對于pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那麼伺服器就會立即斷開用戶端連接配接。

hz 10

#redis執行任務的頻率為1s除以hz。

aof-rewrite-incremental-fsync yes

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

本文轉自去輕狂書生51CTO部落格,原文連結:http://blog.51cto.com/8999a/1976540 ,如需轉載請自行聯系原作者

繼續閱讀