I. 配置文件啓動redis
#注意,爲了讀取配置文件,Redis必須是
以文件路徑做爲第一個參數開始:./redis-server /path/to/redis.conf
II. redis支持的參數
單位:當須要內存大小時,能夠指定
以一般形式的1k 5GB 4M等等:
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 10241024 bytes
# 1g => 1000000000 bytes
# 1gb => 10241024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.
III. include
#注意選項「include」不會被命令「CONFIG REWRITE」重寫,
#from admin或Redis Sentinel。 由於Redis老是使用最後處理的
#line做爲配置指令的值,你最好把包括
#在此文件的開頭,以免覆蓋配置更改在運行時。
#若是相反,您有興趣使用包括覆蓋配置
#include /path/to/local.conf
#include /path/to/other.conf
network
#默認狀況下,若是沒有指定「bind」配置指令,Redis會監聽
#用於來自服務器上可用的全部網絡接口的鏈接。
#能夠只使用一個或多個選定的接口
#「bind」配置指令,後跟一個或多個IP地址。
##
# 例子:
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#~~~警告~~~若是運行Redis的計算機直接暴露在
#internet,綁定到全部的接口是危險的,將暴露在互聯網,單機咱們一般使用127.0.0.1,集羣可能須要指定可以通信的ip地址
IV. bind 10.10.242.23
V. protected-mode yes
當等於yes,就開啓了保護模式,當開啓後,若是使用的是127.0.0.1且未配置密碼是沒法登錄到reids,默認是啓動狀態,若是你確認要和誰通信的狀態下才關閉它,在沒有配置密碼,也沒有特定接口的狀況下,使用bind明確指定,如:bind 10.10.242.23
VI. port 6379
#接受指定端口上的鏈接,默認值爲6379(IANA#815344)。
#若是指定端口0,Redis將不會偵聽TCP套接字。
VII. tcp-backlog 511
最大連接緩衝池的大小,這裏應該是指的未完成連接請求的數量。
#(測試值爲1時,仍能夠有多個連接)
# 但該值與listen函數中的backlog意義應該是相同的,源碼中該值就是被用在了listen函數中
# 該值同時受/proc/sys/net/core/somaxconn 和 tcp_max_syn_backlog(/etc/sysctl.conf中配置)的限制
# tcp_max_syn_backlog 指的是未完成連接的數量
咱們能夠以下修改:
if [ "$(id -u)" = '0' ] && [[ $(sysctl -w net.core.somaxconn=8192) ]]; then
sysctl -w vm.overcommit_memory=1
echo never|tee /sys/kernel/mm/transparent_hugepage/{defrag,enabled}
fi
若是是容器:
$ docker run -d --name redis --privileged --network host -e SENTINEL=enable benyoo/redis:3.2.5-sentinel
VIII. Unix socket
指定將用於偵聽的Unix套接字的路徑,傳入鏈接。 沒有默認值,因此Redis不會監聽未指定時在unix套接字上,設置unix套接字
#unixsocket /tmp/redis.sock
#unixsocketperm 700
# 超時斷鏈機制,若是一個連接在N秒內沒有任何操做,則斷開該連接,N爲0時,該機制失效
IX. timeout 0
X. tcp-keepalive 300
若是是非零值,當失去連接時,會使用SO_KEEPALIVE發送TCP ACKs到客戶端。這個參數有兩個做用:1.檢測斷點;2.從網絡中間設備來看,就是保持連接。在Linux上,設定的時間就是發送ACKs的週期。注意:達到雙倍的設定時間纔會關閉連接。在其餘內核上,週期依賴於內核設置。就像心跳檢測同樣,檢查連接是否保持正常,同時也能夠保持正常連接的通訊,此項在3.2.1版本開始,默認值爲300秒,在以前默認是爲60秒
XI. daemonize no
#默認狀況下,Redis不做爲守護程序運行。 若是須要,使用「yes」。
#注意,當daemonize時,Redis會在/var/run/redis.pid中寫一個pid文件。
supervised no
#若是從upstart或systemd運行Redis,Redis能夠與您交互
選項:
#supervised no - 沒有監督互動
#supervised upstart - 經過將Redis置於SIGSTOP模式來啓動信號
#supervised systemd - signal systemd將READY = 1寫入$ NOTIFY_SOCKET
#supervised auto - 檢測upstart或systemd方法基於
#UPSTART_JOB或NOTIFY_SOCKET環境變量
#注意:這些監督方法只發出「進程就緒」的信號。
XII. pidfile /var/run/redis_6379.pid
#若是指定了pid文件,Redis會在啓動時指定的位置寫入
#並在退出時將其刪除。
#當服務器運行非守護進程時,若是沒有pid文件,則不建立pid文件
#在配置中指定。 當服務器進行守護進程時,pid文件
#即便未指定也會使用,默認爲「/var/run/redis.pid」。
#建立pid文件是最大的努力:若是Redis沒法建立它
#沒有什麼很差發生,服務器將啓動並正常運行。
XIII. loglevel notice
#指定服務器log詳細程度級別。
#這能夠是如下之一:
#debug(不少信息,對開發/測試有用)
#verbose(不多有用的信息,但不像調試級別的混亂)
#notice(適度冗長,你想在生產中可能)
#warning(僅記錄很是重要/關鍵的消息)
XIV. logfile /var/log/redis.log
#指定日誌文件名。 也可使用空字符串強制
#Redis登陸標準輸出。 注意,若是你使用標準
#輸出用於日誌,可是守護進程,日誌將發送到/ dev / null
XV. #syslog-enabled no
#要啓用日誌記錄到系統記錄器,只需將'syslog-enabled'設置爲yes,
#並可選擇更新其餘syslog參數以知足您的須要。
#指定syslog標識。
#syslog-ident redis
#指定syslog設施。 必須是USER或LOCAL0-LOCAL7之間。
#syslog-facility local0
XVI. databases 16
設置數據庫的數目。默認的數據庫是DB 0 ,能夠在每一個鏈接上使用select 命令選擇一個不一樣的數據庫,dbid是一個介於0到databases - 1 之間的數值
XVII. SNAPSHOTTING
#將磁盤上的數據塊保存:
#save
#將保存DB若是給定的秒數和給定的
#發生對數據庫的寫操做數。
#在下面的示例中:
#900秒(15分鐘)內若是至少1個鍵更改將保存
#300秒(5分鐘)內至少10個鍵更改將保存
#after 60 seconds if至少10000 keys changed
#注意:您能夠經過註釋掉全部「保存」行來徹底禁用保存。
#也能夠刪除全部之前配置的保存
#points經過添加一個具備單個空字符串參數的save指令
#像下面的例子:
# 保存 」」
save 900 1
save 300 10
save 60 10000
XVIII. stop-writes-on-bgsave-error yes
默認狀況下,若是 redis 最後一次的後臺保存失敗,redis 將中止接受寫操做,這樣以一種強硬的方式讓用戶知道數據不能正確的持久化到磁盤, 不然就會沒人注意到災難的發生。 若是後臺保存進程從新啓動工做了,redis 也將自動的容許寫操做。然而你要是安裝了靠譜的監控,你可能不但願 redis 這樣作,那你就改爲 no 好了。
XIX. rdbcompression yes
是否在dump .rdb數據庫的時候壓縮字符串,默認設置爲yes。若是你想節約一些cpu資源的話,能夠把它設置爲no,這樣的話數據集就可能會比較大。
XX. rdbchecksum yes
是否CRC64校驗rdb文件,會有必定的性能損失(大概10%)。
XXI. dbfilename dump.rdb
轉儲DB的文件名
XXII. dir ./
數據庫存放目錄。必須是一個目錄,aof文件也會保存到該目錄下。
XXIII. REPLICATION
XXIV. slave-serve-stale-data yes
當一個slave與master失去聯繫時,或者複製正在進行的時候,slave應對請求的行爲:1) 若是爲 yes(默認值) ,slave 仍然會應答客戶端請求,但返回的數據多是過期,或者數據多是空的在第一次同步的時候;2) 若是爲 no ,在你執行除了 info 和 salveof 以外的其餘命令時,slave 都將返回一個 "SYNC with master in progress" 的錯誤。
XXV. slave-read-only yes
設置slave是否爲只讀,從2.6版本期slave默認就是隻讀
====================>
XXVI. repl-diskless-sync no
主從數據複製是否使用無硬盤複製功能。
sync策略,硬盤或套接字,一個RDB文件從主機發送到從機。要麼使用備份,要麼使用無盤:redis主機建立一個新的進程,直接寫入到rdb文件到從插座,而不觸及硬盤。使用磁盤備份複製,同時會生成多個rdb文件,有更多的從科員在當前子節點生成後當即排隊並和rdb文件一塊兒提供rdb文件。而使用無盤複製一次傳輸,到新的傳輸,會在當前中止時啓動
當使用無盤複製時,主服務器等待可配置的量時間(以秒爲單位)開始傳輸以前但願多個從機,將到達而且傳輸能夠並行化。
使用慢磁盤和快速(大帶寬)網絡,無盤複製工做更好。
XXVII. repl-diskless-sync-delay 5
#啓用無磁盤複製時,能夠配置延遲,服務器等待以便生成經過套接字傳輸RDB的子進程
到slave。
這很重要,由於一旦傳輸開始,它是不可能服務新slave到達,這將被排隊等待下一次RDB傳輸,因此服務器等待延遲,以便讓更多的slave到達。
延遲時間以秒爲單位,默認值爲5秒。 禁用徹底只是設置爲0秒,傳輸將盡快啓動。
#從設備以預約義的時間間隔向服務器發送PING。這是可能改變此間隔與repl_ping_slave_period選項。默認值爲10秒。
XXVIII. repl-ping-slave-period 10
#如下選項設置如下項的複製超時:
1)SYNC期間的批量傳輸I / O,從從機的角度。
2)主站從從站(數據,ping)的角度看超時。
3)從主機(REPLCONF ACK ping)的角度看,從機超時。
確保此值大於該值很重要.指定爲repl-ping-slave-period,不然將檢測到超時,每次在主機和從機之間有低流量。
XXIX. repl-timeout 60
主從同步支持兩種策略,即disk和socket方式(socket方式尚不完善,還處於實驗階段)。
新的slave端和重連的salve端不容許去繼續同步進程,這被稱之爲「徹底同步」。
一個RDB文件從master端傳到slave端,分爲兩種狀況:
一、支持disk:master端將RDB file寫到disk,稍後再傳送到slave端;
二、無磁盤diskless:master端直接將RDB file傳到slave socket,不須要與disk進行交互。
無磁盤diskless方式適合磁盤讀寫速度慢但網絡帶寬很是高的環境。
默認不使用diskless同步方式 .
無磁盤diskless方式在進行數據傳遞以前會有一個時間的延遲,以便slave端可以進行到待傳送的目標隊列中,這個時間默認是5秒.
slave端向server端發送pings的時間區間設置,默認爲10秒。
設置超時時間。
====================>
XXX. repl-disable-tcp-nodelay no
指定向slave同步數據時,是否禁用socket的NO_DELAY選 項。若配置爲「yes」,則禁用NO_DELAY,則TCP協議棧會合並小包統一發送,這樣能夠減小主從節點間的包數量並節省帶寬,但會增長數據同步到 slave的時間。若配置爲「no」,代表啓用NO_DELAY,則TCP協議棧不會延遲小包的發送時機,這樣數據同步的延時會減小,但須要更大的帶寬。 一般狀況下,應該配置爲no以下降同步延時,但在主從節點間網絡負載已經很高的狀況下,能夠配置爲yes。
#設置複製積壓大小。積壓是一個積累的緩衝區從數據,當從機斷開一段時間時,使得當從機時想要從新鏈接,一般不須要徹底從新同步,可是部分resync就足夠了,只是傳遞從器件錯過的數據部分disconnect。
複製待辦事項越大,從屬節點的時間就越長斷開鏈接,之後可以執行部分從新同步。僅在至少有一個從站鏈接時才分配積壓。
repl-backlog-size 1mb
XXXI. repl-backlog-ttl 3600
設置backlog的大小,backlog是一個緩衝區,在slave端失連時存放要同步到slave的數據,所以當一個slave要重連時,常常是不須要徹底同步的,執行局部同步就足夠了。backlog設置的越大,slave能夠失連的時間就越長。
若是一段時間後沒有slave鏈接到master,則backlog size的內存將會被釋放。若是值爲0則表示永遠不釋放這部分內存。
XXXII. slave-priority 100
當 master 不能正常工做的時候,Redis Sentinel 會從 slaves 中選出一個新的 master,這個值越小,就越會被優先選中,可是若是是 0 , 那是意味着這個 slave 不可能被選中。 默認優先級爲 100
#若是主數據小於,則能夠中止接受寫入N從站鏈接,具備小於或等於M秒的滯後。
N個從站須要處於「在線」狀態。以秒爲單位的滯後,必須小於指定值,由計算從從設備接收的最後一個ping,一般每秒發送一次。
此選項不保證N個副本將接受寫入,可是將限制在沒有足夠的從設備的狀況下丟失寫入的曝光窗口可用,到指定的秒數。
例如,要求至少3個滯後<= 10秒的從站使用:
min-slaves-to-write 3
min-slaves-max-lag 10
#將一個或另外一個設置爲0將禁用該功能。默認狀況下,min-slaves-to-write設置爲0(禁用功能)和min-slaves-max-lag設置爲10。Redis主機可以列出所鏈接的地址和端口slave以不一樣的方式。例如「INFO複製」部分,提供此信息,除其餘工具以外,使用Redis Sentinel爲了發現從實例。
此信息可用的另外一個地方是「ROLE」命令的一個masterser。獲取從站一般報告的列出的IP和地址,以如下方式:
IP:經過檢查對等體地址自動檢測地址從設備使用的套接字#與主設備鏈接。
Port:端口在複製期間由從設備通訊,handshake,一般是從機使用的端口列出鏈接。可是當端口轉發或網絡地址轉換(NAT)時使用,從屬實際上能夠經過不一樣的IP和端口到達。從站可使用如下兩個選項
#報告給它的主機一個特定的IP和端口集,使INFO和ROLE將報告這些值。
#沒有必要使用這兩個選項,若是你須要覆蓋只是端口或IP地址。
slave-announce-ip 5.5.5.5
slave-announce-port 1234
################################## SECURITY
#要求客戶端在處理任何其餘文件以前發出AUTH 命令。這在您不信任的環境中可能頗有用,其餘用戶能夠訪問運行redis-server的主機。。這應該保持註釋掉向後兼容性,由於大多數我的不須要身份驗證(例如他們運行本身的服務器)。
#警告:由於Redis是至關快的外部用戶能夠嘗試
#150k密碼每秒對一個好的盒子。這意味着你應該
#使用很是強的密碼不然會很容易破解。
#requirepass foobared
#命令重命名。能夠更改共享中的危險命令的名稱, 環境。例如,CONFIG命令能夠重命名爲某物,難以猜想,因此它仍然可用於內部使用工具,但不適用於通常客戶。示例:
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
也能夠經過將命令重命名爲徹底殺死命令
一個空字符串:
rename-command CONFIG「」
請注意,更改已登陸到的命令的名稱
AOF文件或傳輸到從站可能會致使問題。
################################### LIMITS
#同時設置鏈接的客戶端的最大數量。默認
#此限制設置爲10000個客戶端,但若是Redis服務器不是可以配置進程文件限制以容許指定的限制,容許的最大客戶端數被設置爲當前文件限制,minus 32(由於Redis爲內部使用保留了幾個文件描述符)。
#一旦達到限制,Redis將關閉全部新鏈接發送an error'max number of clients reached'。
XXXIII. maxclients 10000
#LRU和最小TTL算法不是精確的算法,而是近似的算法(爲了節省內存),因此你能夠調整它的速度或準確性。對於默認Redis將檢查五個鍵,並選擇一個最近使用較少,您可使用如下更改樣本大小configuration指令。
#默認值爲5產生足夠好的結果。 10很是接近true LRU可是成本多一點CPU。 3是很是快,但不是很準確。
maxmemory-samples 5
默認值5,上面LRU和最小TTL策略並不是嚴謹的策略,而是大約估算的方式,所以能夠選擇取樣值以便檢查。
maxclients 10000
maxmemory
maxmemory-policy volatile-lru
限制同時鏈接的客戶數量。當鏈接數超過這個值時,redis 將再也不接收其餘鏈接請求,客戶端嘗試鏈接時將收到error 信息。默認爲10000,要考慮系統文件描述符限制,不宜過大,浪費文件描述符,具體多少根據具體狀況而定。
redis-cache所能使用的最大內存(bytes),默認爲0,表示」無限制」,最終由OS物理內存大小決定(若是物理內存不足,有可能會使用swap)。此值儘可能不要超過機器的物理內存尺寸,從性能和實施的角度考慮,能夠爲物理內存3/4。此配置須要和」maxmemory-policy」配合使用,當redis中內存數據達到maxmemory時,觸發」清除策略」。在」內存不足」時,任何write操做(好比set,lpush等)都會觸發」清除策略」的執行。在實際環境中,建議redis的全部物理機器的硬件配置保持一致(內存一致),同時確保master/slave中」maxmemory」」policy」配置一致。
當內存滿了的時候,若是還接收到set 命令,redis 將先嚐試剔除設置過expire 信息的key,而無論該key 的過時時間尚未到達。在刪除時,
將按照過時時間進行刪除,最先將要被過時的key 將最早被刪除。若是帶有expire 信息的key 都刪光了,內存還不夠用,那麼將返回錯誤。這樣,redis 將再也不接收寫請求,只接收get 請求。maxmemory 的設置比較適合於把redis 看成於相似memcached的緩存來使用。
最大內存策略,你有 5 個選擇:
volatile-lru -> 使用 LRU 算法移除包含過時設置的 key 。
noeviction -> 不讓任何 key 過時,只是給寫入操做返回一個錯誤。
allkeys-lru -> 根據 LRU 算法移除全部的 key 。
volatile-random -> 對」過時集合」中的數據採起」隨即選取」算法,並移除選中的K-V,直到」內存足夠」爲止. 若是若是」過時集合」中所有移除所有移除仍不能知足,將OOM
allkeys-random -> 對全部的數據,採起」隨機選取」算法,並移除選中的K-V,直到」內存足夠」爲止
volatile-ttl ->對」過時集合」中的數據採起TTL算法(最小存活時間),移除即將過時的數據.
############################## APPEND ONLY MODE
XXXIV. appendonly yes
默認狀況下,redis 會在後臺異步的把數據庫鏡像備份到磁盤,可是該備份是很是耗時的,並且備份也不能很頻繁。因此redis 提供了另一種更加高效的數據庫備份及災難恢復方式。開啓append only 模式以後,redis 會把所接收到的每一次寫操做請求都追加到appendonly.aof 文件中,當redis 從新啓動時,會從該文件恢復出以前的狀態。可是這樣會形成appendonly.aof 文件過大,因此redis 還支持了BGREWRITEAOF 指令,對appendonly.aof 進行從新整理。若是不常常進行數據遷移操做,推薦生產環境下的作法爲關閉鏡像,開啓appendonly.aof,同時能夠選擇在訪問較少的時間天天對appendonly.aof 進行重寫一次。
另外,對master機器,主要負責寫,建議使用AOF,對於slave,主要負責讀,挑選出1-2臺開啓AOF,其他的建議關閉。
是否啓用aof持久化方式 。便是否在每次更新操做後進行日誌記錄,默認配置是no,即在採用異步方式把數據寫入到磁盤,若是不開啓,可能會在斷電時致使部分數據丟失。
XXXV. appendfilename "appendonly.aof"
更新日誌文件名,默認值爲appendonly.aof 。
XXXVI. appendfsync everysec
aof文件刷新的頻率。有三種:
1)no 依靠OS進行刷新,redis不主動刷新AOF,這樣最快,但安全性就差。
- always 每提交一個修改命令都調用fsync刷新到AOF文件,很是很是慢,但也很是安全。
- everysec 每秒鐘都調用fsync刷新到AOF文件,很快,但可能會丟失一秒之內的數據。
設置對appendonly.aof 文件進行同步的頻率。always 表示每次有寫操做都進行同步,everysec 表示對寫操做進行累積,每秒同步一次。no不主動fsync,由OS本身來完成。這個須要根據實際業務場景進行配置。
XXXVII. appendfsync no
當AOF fsync策略設置爲always或everysec和背景時
#保存過程(後臺保存或AOF日誌背景重寫)是在一些Linux配置中對磁盤執行大量I / O
Redis可能在fsync()調用時阻塞太長時間。請注意,沒有修復this目前,由於即便在不一樣的線程執行fsync也會阻塞咱們的同步寫(2)調用。
爲了緩解這個問題,可使用如下選項
將阻止fsync()在主進程中被調用正在進行#BGSAVE或BGREWRITEAOF。
這意味着當另外一個保存時,Redis的持久性是與「appendfsync none」相同。實際上,這意味着它可能丟失最多30秒的日誌在最糟糕的狀況下(與default Linux settings)。
若是您有延遲問題,請將此設置爲「yes」。不然保留爲「no」這是從耐用性的角度來看最安全的選擇。
XXXVIII. no-appendfsync-on-rewrite no
指定是否在後臺aof文件rewrite期間調用fsync,默認爲no,表示要調用fsync(不管後臺是否有子進程在刷盤)。Redis在後臺寫RDB文件或重寫AOF文件期間會存在大量磁盤IO,此時,在某些linux系統中,調用fsync可能會阻塞。
XXXIX. auto-aof-rewrite-percentage 100
當AOF文件增加到必定大小的時候Redis可以調用 BGREWRITEAOF 對日誌文件進行重寫 。當AOF文件大小的增加率大於該配置項時自動開啓重寫。
XL. auto-aof-rewrite-min-size 64mb
當AOF文件增加到必定大小的時候Redis可以調用 BGREWRITEAOF 對日誌文件進行重寫 。當AOF文件大小大於該配置項時自動開啓重寫。
XLI. aof-load-truncated yes
redis在啓動時能夠加載被截斷的AOF文件,而不須要先執行 redis-check-aof 工具。
#AOD文件可能會在Redis結束時被截斷啓動過程,當AOF數據被加載回內存。這可能發生在Redis運行的系統上崩潰,特別是當一個ext4文件系統沒有安裝data = ordered選項(可是這不會發生在Redis自己崩潰或停止,但操做系統仍然正常工做)。Redis能夠在出現這種狀況時退出並返回錯誤,或者加載儘量多的內容數據(默認爲如今),若是找到AOF文件,則啓動在末尾被截斷。如下選項控制此行爲。若是aof-load-truncated設置爲yes,則加載截斷的AOF文件Redis服務器開始發出日誌以通知用戶事件。不然,若是該選項設置爲no,服務器將停止並出現錯誤並拒絕啓動。當該選項設置爲no時,用戶須要從新啓動前使用「redis-check-aof」實用程序修復AOF文件
服務器。
注意,若是AOF文件被髮如今中間被損壞服務器仍將退出並顯示錯誤。此選項僅適用於
Redis將嘗試從AOF文件讀取更多數據,但沒有足夠的字節將被找到。
################################ LUA SCRIPTING
XLII. lua-time-limit 5000
一個Lua腳本最長的執行時間,單位爲毫秒,若是爲0或負數表示無限執行時間,不帶警告,默認爲5000。
################################ REDIS CLUSTER
XLIII. cluster-enabled yes
#cluster node啓用集羣支持取消註釋如下內容:
XLIV. cluster-config-file nodes-6379.conf
#每一個集羣節點都有一個集羣配置文件。 這個文件不是旨在手動編輯。 它由Redis節點建立和更新。每一個Redis羣集節點須要一個不一樣的羣集配置文件。確保在同一系統中運行的實例沒有
重疊羣集配置文件名。若是集羣建立失敗,須要刪除這個文件後重啓便可
cluster-node-timeout 5000
#集羣節點超時是節點必須沒法訪問的毫秒,以便它被認爲處於故障狀態。大多數其餘內部時間限制是節點超時的倍數。
設置集羣節點超時時間,若是超過了指定的超時時間後仍不可達,則節點被認爲是失敗狀態,單位爲毫秒。
一個屬於失效的master端的slave,若是它的數據較舊,將不會啓動failover。
如今來說並無一個簡單的方法去解決如何斷定一個slave端的數據的時效性問題,因此能夠執行如下兩個選擇:
一、若是有多個slave可用於failover,它們會交換信息以便選出一個最優的進行主從複製的offset,slave端會嘗試依據offset去獲取每一個slave的rank,這樣在啓動failover時對每一個slave的利用就與slave端的rank成正比。
二、每一個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端的最後交互時間。
XLV. cluster-slave-validity-factor 10
集羣中的slave能夠遷移到那些沒有可用slave的master端,這提高了集羣處理故障的能力。畢竟一個沒有slave的master端若是發生了故障是沒有辦法去進行failover的。
要將一個slave遷移到別的master,必須這個slave的原master端有至少給定數目的可用slave才能夠進行遷移,這個給定的數目由migration barrier參數來進行設置,默認值爲1,表示這個要進行遷移的slave的原master端應該至少還有1個可用的slave才容許其進行遷移,要禁用這個功能只須要將此參數設置爲一個很是大的值。
XLVI. cluster-migration-barrier 1
默認狀況下當redis集羣節點發現有至少一個hashslot未被covered時將會中止接收查詢。
這種狀況下若是有一部份的集羣down掉了,那整個集羣將變得不可用。
集羣將會在全部的slot從新covered以後自動恢復可用。
若想要設置集羣在部份key space沒有cover完成時繼續去接收查詢,就將參數設置爲no。
XLVII. cluster-require-full-coverage yes
slowlog-log-slower-than 10000
「慢操做日誌」記錄,單位:微秒(百萬分之一秒,1000 * 1000),若是操做時間超過此值,將會把command信息」記錄」起來.(內存,非文件)。其中」操做時間」不包括網絡IO開支,只包括請求達到server後進行」內存實施」的時間.」0」表示記錄所有操做。
XLVIII. slowlog-max-len 128
#這個長度沒有限制。 只是要注意它會消耗內存。您可使用SLOWLOG RESET來回收慢速日誌使用的內存。
「慢操做日誌」保留的最大條數,」記錄」將會被隊列化,若是超過了此長度,舊記錄將會被移除。能夠經過」SLOWLOG args」查看慢記錄的信息(SLOWLOG get 10,SLOWLOG reset)。
################################ LATENCY MONITOR
XLIX. latency-monitor-threshold 0
延遲監控,用於記錄等於或超過了指定時間的操做,默認是關閉狀態,即值爲0。
#系統只記錄在等於或的時間執行的操做大於經過指定的毫秒數latency-monitor-threshold配置指令。 當其值設置時置零,延遲監視器關閉。
默認狀況下,延遲監控被禁用,由於它大多不須要若是沒有延遲問題,而且收集數據有性能
衝擊,雖然很小,能夠在大負載下測量。 潛伏監視能夠在運行時使用命令輕鬆啓用「CONFIG SET latency-monitor-threshold 」(若是須要)。
############################# EVENT NOTIFICATION
notify-keyspace-events ""
#Redis能夠通知Pub / Sub客戶端關鍵空間中發生的事件。此功能在http://redis.io/topics/notifications中進行了說明
例如,若是啓用了鍵空間事件通知和客戶端對存儲在數據庫0中的鍵「foo」執行DEL操做,兩個郵件將經過Pub / Sub發佈:
#PUBLISH __keyspace @ 0 __:foo del
#PUBLISH __keyevent @ 0 __:del foo
能夠選擇Redis在集合中通知的事件類。每一個類由單個字符標識:
K鍵空間事件,使用__keyspace @ __前綴發佈。
E Keyevent事件,使用__keyevent @ __前綴發佈。
g通用命令(非特定類型),如DEL,EXPIRE,RENAME,...
$ String命令
l列出命令
s設置命令
h哈希命令
z排序set命令
x過時事件(每次密鑰過時時生成的事件)
e驅逐事件(當maxmemory驅逐某個鍵時生成的事件)
A g $ lshzxe的別名,所以「AKE」字符串表示全部事件。
#「notify-keyspace-events」接受一個做爲參數的字符串爲零或多個字符。空字符串表示通知已禁用。
示例:啓用列表和通用事件,從的角度來看event name,use:
notify-keyspace-events Elg
示例2:獲取訂閱頻道的過時密鑰的流
name __keyevent @ 0 __:expired use:
notify-keyspace-events例如
默認狀況下,全部通知都被禁用,由於大多數用戶不須要此功能和功能有一些開銷。注意,若是你不指定K或E中的至少一個,不會傳送任何事件。
############################### ADVANCED CONFIG
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
hash類型的數據結構在編碼上可使用ziplist和hashtable。ziplist的特色就是文件存儲(以及內存存儲)所需的空間較小,在內容較小時,性能和hashtable幾乎同樣.所以redis對hash類型默認採起ziplist。若是hash中條目的條目個數或者value長度達到閥值,將會被重構爲hashtable。
這個參數指的是ziplist中容許存儲的最大條目個數,,默認爲512,建議爲128。ziplist中容許條目value值最大字節數,默認爲64,建議爲1024。
L. list-max-ziplist-size -2
#列表也以特殊方式編碼,以節省大量空間。能夠指定每一個內部列表節點容許的條目數做爲固定的最大大小或最大數量的元素。對於固定的最大大小,請使用-5到-1,意思是:
-5:max size:64 Kb < - 不推薦用於正常工做負載
-4:max size:32 Kb < - 不推薦
-3:max size:16 Kb < - 可能不推薦
-2:最大尺寸:8Kb < - 好
-1:最大尺寸:4 Kb < - 好
正數表示存儲最多exactly該數量的元素per list node。
高性能選項一般是-2(8 Kb大小)或-1(4 Kb大小)但若是您的用例是惟一的,請根據須要調整設置。
LI. list-compress-depth 0
#也能夠壓縮列表。壓縮深度是從每一個側的快速清單ziplist節點的數量列表,* 排除從壓縮。 列表的頭和尾
始終未壓縮以進行快速推送/彈出操做。 設置包括:
0:禁用全部列表壓縮
1:depth 1表示「不要開始壓縮,直到1個節點進入列表,
從頭或尾「走」
so:[head] - > node-> node - > ...-> node - > [tail]
[head],[tail]將始終未壓縮; 內部節點將壓縮。
2:[head] - > [next] - > node-> node-> ...-> node-> [prev]
2這裏的意思是:不壓縮head或head-> next或tail-> prev或tail,
可是壓縮它們之間的全部節點。
3:[head] - > [next] - > [next] - > node-> node-> ...-> node->等。
redis在3.2中廢棄了以前的兩個list底層結構設置:list-max-ziplist-entries 512 list-max-ziplist-value 64。改成新的quicklist結構,具體詳情看:http://blog.csdn.net/a809146548/article/details/52013225
LII. set-max-intset-entries 512
與哈希和列表相似,有序集合也會使用一種特殊的編碼方式來節省空間,這種特殊的編碼方式只用於這個有序集合的長度和元素均低於如下參數設置的值時。 intset中容許保存的最大條目個數,若是達到閥值,intset將會被重構爲hashtable。
#集合在一種狀況下有一個特殊的編碼:當組合時的只是正好是範圍內的10的整數的字符串
64位有符號整數。如下配置設置設置大小的限制設置爲了使用這種特殊的內存保存編碼。
LIII. zset-max-ziplist-entries 128
zset-max-ziplist-value 64
zset爲有序集合,有2中編碼類型:ziplist,skiplist。由於」排序」將會消耗額外的性能,當zset中數據較多時,將會被重構爲skiplist。
LIV. hll-sparse-max-bytes 3000
設置HyeperLogLog的字節數限制,這個值一般在0~15000之間,默認爲3000,基本不超過16000 。
#HyperLogLog稀疏表示字節數限制。 限制包括16字節標頭。 當使用稀疏表示HyperLogLog交叉時這個限制,它被轉換成密集表示。大於16000的值是徹底無用的,由於那時候密集表示更有內存效率。建議的值是〜3000以便有好處空間高效編碼,而不會減慢太多的PFADD,是具備稀疏編碼的O(N)。 該值能夠提升到〜10000當CPU不是一個關注,但空間是,而且數據集是由許多HyperLogLogs組成,基數在0 - 15000範圍內。
LV. activerehashing yes
是否開啓頂層數據結構的rehash功能,若是內存容許,請開啓。rehash可以很大程度上提升K-V存取的效率。redis將會在每秒中抽出10毫秒來對主字典進行從新散列化處理,這有助於儘量的釋放內存。
#active rehashing每100毫秒的CPU時間使用1毫秒order以幫助從新散列主Redis散列表(一個映射頂層keys to values)。 Redis使用的哈希表實現(見dict.c)執行延遲從新散列:運行到散列表中的操做越可能是從新散列,執行更多的從新散列「步驟」,因此若是server is idle the rehashing is never complete and some more memory is used由散列表。
#默認是每秒使用這個毫秒10次主動重寫主要的字典,儘量釋放內存。
#若是不肯定:use「activerehashing no」若是你有硬的延遲要求,它是在Redis能夠不時回覆的環境中不是一件好事到2毫秒延遲的查詢。
#use「activerehashing yes」若是你沒有這麼嚴格的要求,但想盡量釋放內存空間。
client-output-buffer-limit
由於某些緣由,client不能足夠快的從server讀取數據,那client的輸出緩存限制可能會使client失連,這個限制可用於3種不一樣的client種類,分別是:normal、slave和pubsub。
LVI. client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
客戶端buffer控制。在客戶端與server進行的交互中,每一個鏈接都會與一個buffer關聯,此buffer用來隊列化等待被client接受的響應信息。若是client不能及時的消費響應信息,那麼buffer將會被不斷積壓而給server帶來內存壓力.若是buffer中積壓的數據達到閥值,將會致使鏈接被關閉,buffer被移除。
buffer控制類型包括:normal -> 普通鏈接;slave ->與slave之間的鏈接;pubsub ->pub/sub類型鏈接,此類型的鏈接,每每會產生此種問題;由於pub端會密集的發佈消息,可是sub端可能消費不足.
指令格式:client-output-buffer-limit 「,其中hard表示buffer最大值,一旦達到閥值將當即關閉鏈接;
soft表示」容忍值」,它和seconds配合,若是buffer值超過soft且持續時間達到了seconds,也將當即關閉鏈接,若是超過了soft可是在seconds以後,buffer數據小於了soft,鏈接將會被保留.
其中hard和soft都設置爲0,則表示禁用buffer控制.一般hard值大於soft.
#客戶端輸出緩衝區限制可用於強制斷開客戶端沒有從服務器讀取數據足夠快,出於某種緣由(a常見的緣由是發佈/訂閱客戶端不能消耗消息的速度publisher能夠產生它們)。
對於三種不一樣類別的客戶端,能夠設置不一樣的限制:
#normal - >正常客戶端,包括MONITOR客戶端
#slave - >從客戶端
#pubsub - >客戶端訂閱至少一個pubsub渠道或模式
#每一個client-output-buffer-limit僞指令的語法以下:
client-output-buffer-limit
客戶端在達到硬限制後當即斷開鏈接,或者達到軟限制並達到指定數量的軟限制秒(連續)。
例如,若是硬限制爲32 MB,軟限制爲16兆字節/ 10秒,客戶端會當即斷開鏈接
若是輸出緩衝區的大小達到32兆字節,但也會獲得斷開鏈接,若是客戶端達到16兆字節並持續克服限制10秒。
默認狀況下,正常客戶端不受限制,由於它們不接收數據沒有詢問(推送方式),但只是在請求後,因此只異步客戶端能夠建立更快地請求數據的場景比它能夠讀。
改成對pubsub和從屬客戶端有一個默認限制用戶和從設備以推送方式接收數據。
經過將硬限制或軟限制設置爲零能夠禁用。
LVII. hz 10
redis使用一個內部程序來處理後臺任務,例如關閉超時的client鏈接,清除過時的key等等。它並不會同時處理全部的任務,redis經過指定的hz參數去檢查和執行任務。
hz默認設爲10,提升它的值將會佔用更多的cpu,固然相應的redis將會更快的處理同時到期的許多key,以及更精確的去處理超時。
hz的取值範圍是1~500,一般不建議超過100,只有在請求延時很是低的狀況下能夠將值提高到100。
LVIII. aof-rewrite-incremental-fsync yes
當一個子進程要改寫AOF文件,若是如下選項啓用,那文件將會在每產生32MB數據時進行同步,這樣提交增量文件到磁盤時能夠避免出現比較大的延遲。