濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Redis3.2.6配置文件詳細(xì)中文說(shuō)明

Redis3.2.6配置文件詳細(xì)中文說(shuō)明

熱門(mén)標(biāo)簽:b2b外呼系統(tǒng) 高碑店市地圖標(biāo)注app 南京手機(jī)外呼系統(tǒng)廠家 臺(tái)灣電銷 地圖標(biāo)注工廠入駐 四川穩(wěn)定外呼系統(tǒng)軟件 一個(gè)地圖標(biāo)注多少錢 廊坊外呼系統(tǒng)在哪買 400電話辦理的口碑

Redis3.2.6最新配置文件詳細(xì)中文說(shuō)明,啥都不說(shuō)直接看說(shuō)明

##############
# 指定配置文件:
################################## INCLUDES #####################################
#
# 1 包含文件
# 如果想要使用到配置文件,Redis服務(wù)必須以配置文件的路徑作為第一個(gè)參數(shù)啟動(dòng)。如:./redis-server /path/to/redis.conf
# 單位說(shuō)明:當(dāng)需要指定內(nèi)存大小時(shí),可能會(huì)使用到不同的單位,如1k、5GB、4M等,這里給出其單位含義:
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
# s指定單位是大小寫(xiě)不敏感。如1GB、1gB、1Gb是一樣的。
# include使用:
# 用于include一個(gè)或多個(gè)配置文件。
# 當(dāng)需要在一個(gè)標(biāo)準(zhǔn)的通用配置模板上進(jìn)行一些個(gè)性化定制,則可以使用include 關(guān)鍵字來(lái)include這些個(gè)性化配置文件。
# 注意:雖然admin 或Redis Sentinel下執(zhí)行的“CONFIG REWRITE”命令(Redis 2.8 引入的命令)會(huì)重寫(xiě)配置,但并不包含“include”關(guān)鍵字。也就是說(shuō)“CONFIG REWRITE”覆蓋“include”相關(guān)內(nèi)容。
# 由于redis以最后的配置作為直接配置,所以建議將include命令放置在配置文件的最前面以防止配置被覆蓋。
# 但是如果打算使用另外的配置文件來(lái)覆蓋當(dāng)前文件的部分或全部配置,那么則可將include命令放置到該文件的末尾。
# Redis這里使用了最后生效原則,即最后被解析的配置將作為最后的配置。
# 格式如下:

# include /path/to/local.conf
# include /path/to/other.conf

##############
# 網(wǎng)絡(luò)配置:
# 對(duì)服務(wù)器網(wǎng)絡(luò)相關(guān)的參數(shù)進(jìn)行一個(gè)配置。
################################## NETWORK #####################################
#
# 1 bind命令
# 我們知道,一臺(tái)服務(wù)器上可能有多個(gè)網(wǎng)絡(luò)接口,所以如果沒(méi)有使用bind指定接口,Redis將監(jiān)聽(tīng)該機(jī)器上的所有網(wǎng)絡(luò)接口的連接請(qǐng)求。
# 如果僅需要監(jiān)聽(tīng)一個(gè)或多個(gè)指定的接口,則可以使用“bind”命令來(lái)指定接口。
# 實(shí)例如下:
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
# ~~~ WARNING ~~~ 如果運(yùn)行Redis服務(wù)的機(jī)器直接暴漏在Internet中,那么綁定所有的接口是一件危險(xiǎn)的事。因?yàn)檫@樣會(huì)將Redis服務(wù)暴漏給Internet中的每一個(gè)人。所以默認(rèn)情況下,使用bind 127.0.0.1命令強(qiáng)制Redis監(jiān)聽(tīng)I(yíng)Pv4環(huán)回接口地址,也就是說(shuō)Redis僅接受本機(jī)的客戶端請(qǐng)求。
# 服務(wù)器可以有一個(gè)網(wǎng)絡(luò)接口(通常表述為網(wǎng)卡),或者多個(gè)。假設(shè)某機(jī)器上有兩個(gè)網(wǎng)卡,分別為192.168.205.5 和192.168.205.6,如果bind 192.168.205.5,那么只有該網(wǎng)卡地址接受外部請(qǐng)求,如果不綁定,則兩個(gè)網(wǎng)卡口都接受請(qǐng)求。
# 如果需要進(jìn)行外網(wǎng)訪問(wèn)則需注銷該命令行。在配置文件中,“#”代表注釋。
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 127.0.0.1
# 2 保護(hù)模式
# 保護(hù)模式是Redis提供的安全防護(hù)層。設(shè)立該層是為了避免網(wǎng)絡(luò)對(duì)未關(guān)閉Redis實(shí)例的隨意訪問(wèn)。
# 該模式需要開(kāi)啟,當(dāng):
# 1) 沒(méi)有使用“bind”命令明確需要綁定的地址;
# 2) 沒(méi)有為Redis配置密碼。
# 該模式啟動(dòng)后,服務(wù)器僅能接受使用IPv4、IPv6環(huán)回地址(127.0.0.1或::1)和本地Socket的客戶端的連接請(qǐng)求。
# 默認(rèn)情況下,保護(hù)模式是開(kāi)啟的。建議只有在已明確待連接的客戶端無(wú)需授權(quán)或無(wú)需使用bind指定特定的接口時(shí)才關(guān)閉該模式。
# 使用如下:
protected-mode yes
# 3 端口
# 在指定的端口上進(jìn)行監(jiān)聽(tīng),默認(rèn)是 6379。當(dāng)端口設(shè)置為0時(shí),Redis就不會(huì)在TCP socket上進(jìn)行監(jiān)聽(tīng)。
# 使用如下:
port 6379
# 4 TCP listen() backlog設(shè)置
# 在一個(gè)并發(fā)量高的環(huán)境中,需要指定一個(gè)比較大的backlog值來(lái)避免慢連接情況的發(fā)生。注意,linux內(nèi)核會(huì)默認(rèn)使用/proc/sys/net/core/somaxconn值來(lái)減小backlog實(shí)際值。因此為了獲得期望的值,需要確保增大 somaxconn 和 tcp_max_syn_backlog 這兩個(gè)值。
# 建議配置:
tcp-backlog 511
# 5 Unix socket
# 指定Unix socket路徑來(lái)進(jìn)行連接監(jiān)聽(tīng)。默認(rèn)是不指定,因此redis不會(huì)在Unix socket上進(jìn)行監(jiān)聽(tīng)。
# 使用方法如下:
# unixsocket /tmp/redis.sock
# unixsocketperm 700
# 6 Client timeout
# 當(dāng)client在空閑N秒后,關(guān)閉該連接(0表示不處理空閑連接,默認(rèn)方式)
# 實(shí)例:
timeout 0
# 7 TCP keepalive時(shí)間
# 當(dāng)該值非零時(shí),如果通信缺失,Redis會(huì)使用SO_KEEPALIVE發(fā)送TCP ACKs給客戶端。這樣做的好處有二:
# 1)檢測(cè)已經(jīng)死亡對(duì)端。(TCP關(guān)閉存在無(wú)法完成4次握手的情況,如斷電,斷網(wǎng),數(shù)據(jù)丟失等等)
# 2)保存已有連接的活性。
# 在Linux中,該指定時(shí)間是一次發(fā)送ACKs的時(shí)間片。對(duì)于其他內(nèi)核系統(tǒng),其時(shí)間片大小與內(nèi)核配置有關(guān)。
# 一個(gè)比較合理的值是300 seconds。Redis 3.2.1版本之后默認(rèn)指定該值為300 seconds。
# 實(shí)例如下:
tcp-keepalive 300

##############
# 通用配置:
# 對(duì)一些通用參數(shù)進(jìn)行配置。
################################# GENERAL #####################################
#
# 1 daemon
# 默認(rèn)情況下,Redis并不是一個(gè)守護(hù)進(jìn)程,如果需要將Redis設(shè)置成守護(hù)進(jìn)程,則可以使用daemonize yes進(jìn)行配置。注意:當(dāng)Redis作為守護(hù)進(jìn)程時(shí), 其pid 文件為 /var/run/redis.pid。
# 使用如下:
daemonize no
# 2 supervision
# Redis 3.2新增命令。如果需要在機(jī)器啟動(dòng)(upstart模式 或systemd模式)時(shí)就啟動(dòng)Redis服務(wù)器,可以通過(guò)該選項(xiàng)來(lái)配置Redis。
# 支持的模式:
# supervised no – 無(wú),不會(huì)與supervised tree進(jìn)行交互
# supervised upstart – 將Redis服務(wù)器添加到SIGSTOP 模式中
# supervised systemd – 將READY=1 寫(xiě)入 $NOTIFY_SOCKET
# supervised auto – 根據(jù)環(huán)境變量UPSTART_JOB 或NOTIFY_SOCKET檢測(cè)upstart 還是 systemd
# 注意,上述supervision方法(upstart或systemd)僅發(fā)出“程序已就緒”信號(hào),不會(huì)繼續(xù)給supervisor返回ping回復(fù)。
# 默認(rèn)是不開(kāi)啟:
supervised no
# 3 pid文件
# 如果指定了pid文件,Redis會(huì)在啟動(dòng)時(shí)寫(xiě)該pid文件,在退出時(shí)刪除該文件。
# 當(dāng)Redis服務(wù)器已守護(hù)進(jìn)程啟動(dòng)時(shí),如果指定了配置文件,則直接使用,如果沒(méi)有指定,則創(chuàng)建/var/run/redis.pid作為配置文件。
# 使用如下:
pidfile /var/run/redis_6379.pid
# 4 日志級(jí)別
# 指定服務(wù)器的verbosity級(jí)別。Redis提供四種級(jí)別:
# debug —- 包含大量信息,用于開(kāi)發(fā)和測(cè)試
# verbose —- 包含一些稀有的有用信息,但沒(méi)有debug級(jí)別混亂
# notice —- 適量提示信息,用于生產(chǎn)環(huán)境
# warning —- 只包含非常重要和關(guān)鍵的信息
# 默認(rèn)是notice級(jí)別:
loglevel notice
# 5 日志文件名稱
# 指定日志文件名稱。指定為空時(shí)將輸出到標(biāo)準(zhǔn)輸出設(shè)備中。如果Redis以守護(hù)進(jìn)程啟動(dòng),當(dāng)日志文件名稱為空時(shí),日志將會(huì)輸出到 /dev/null。
# 默認(rèn)設(shè)置如下:
logfile ""
# 6 寫(xiě)系統(tǒng)日志
# 6.1允許寫(xiě)系統(tǒng)日志
# 將syslog-enabled設(shè)置為yes時(shí), 允許將Redis服務(wù)日志記錄到系統(tǒng)日志中。此外,還
# 可以使用更多的日志參數(shù)來(lái)滿足特定要求。
# 實(shí)例如下:
# syslog-enabled no
# 6.2指定在系統(tǒng)日志身份
# 一旦enable寫(xiě)入系統(tǒng)日志,可以指定服務(wù)在系統(tǒng)日志身份。實(shí)例如下:
# syslog-ident redis
# 6.3指定系統(tǒng)日志能力級(jí)別
# 系統(tǒng)日志級(jí)別必須是 LOCAL0 到 LOCAL7 之間(閉區(qū)間)的值。實(shí)例如下:
# syslog-facility local0
# 7 數(shù)據(jù)庫(kù)數(shù)量
# 設(shè)置數(shù)據(jù)庫(kù)的數(shù)量。默認(rèn)使用0號(hào)數(shù)據(jù)庫(kù)??梢栽诿恳粋€(gè)連接上使用SELECT dbid> 來(lái)指定另外的數(shù)據(jù)庫(kù),但是這個(gè)值必須在 0到 ‘database'-1之間。
# 實(shí)例如下:
databases 16

################
# 快照配置:
# Redis提供快照功能,記錄某一時(shí)刻數(shù)據(jù)庫(kù)中保存的數(shù)據(jù)。
################################ SNAPSHOTTING ################################
#
# 1 DB持久化
# 將DB數(shù)據(jù)保存到磁盤(pán)。格式為:save seconds> changes>。當(dāng)在規(guī)定的時(shí)間內(nèi)seconds,如果寫(xiě)磁盤(pán)的次數(shù)超過(guò)了changes,則將DB數(shù)據(jù)保存到磁盤(pán)。如save 900 1表示在900秒內(nèi),如果對(duì)DB進(jìn)行了至少一次寫(xiě)操作,則將DB數(shù)據(jù)持久化到磁盤(pán)上。
# 注意,可以通過(guò)注銷所有save命令或?qū)⒃谒衧ave命令后追加save置空(save “”)命令來(lái)禁用save功能。使用示例:
save 900 1
save 300 10
save 60 10000
# 2 bgsave-error
# 默認(rèn)情況下,在發(fā)生RDB快照或BGSAVE執(zhí)行失敗的那一刻,Redishi執(zhí)行接收寫(xiě)請(qǐng)求。這會(huì)使用戶察覺(jué)(通常比較困難)到數(shù)據(jù)沒(méi)有正確的持久化到磁盤(pán)。否則有可能出現(xiàn)不被察覺(jué)的災(zāi)難性后果。
# 當(dāng)后臺(tái)BGSAVE程序可以再次開(kāi)始工作時(shí),Reidis會(huì)再次自動(dòng)允許寫(xiě)入。
# 如果已經(jīng)對(duì)Server和服務(wù)器持久化建立了正確的監(jiān)控,那么當(dāng)你禁用該功能后,即使磁盤(pán)、持久化等出現(xiàn)問(wèn)題,Redis也能繼續(xù)提供服務(wù)。
# 實(shí)例如下:
stop-writes-on-bgsave-error yes
# 3 rdbcompression
# 默認(rèn)情況下,在dump RDB文件時(shí),Redis采用LZF(一種高效的壓縮算法)算法進(jìn)行字符串對(duì)象數(shù)據(jù)的壓縮,其性能較高。雖然LZF算法會(huì)消耗部分CPU性能,但是其數(shù)據(jù)壓縮能夠較高,所以建議不要關(guān)閉:
rdbcompression yes
# 4 RDB文件名稱
# 該命令用于定義dump DB文件的文件名。格式如下:
dbfilename dump.rdb
# 5 工作目錄
# 指定RDB文件所在目錄。該目錄也是AOF文件所在目錄。注意,這里是指定一個(gè)目錄而不是文件名。默認(rèn)是當(dāng)前目錄,格式如下:
dir ./

##################
# 復(fù)制配置:
# Redis提供主從復(fù)制功能保證數(shù)據(jù)的可靠性。
################################# REPLICATION ###################################
#
# 1 主從關(guān)系建立
# Redis主從復(fù)制。單機(jī)模式下,Redis支持使用slaveof命令從另一個(gè)Redis服務(wù)器的拷貝中來(lái)創(chuàng)建一個(gè)實(shí)例。集群模式下則使用cluster replicate master-id>命令。Redis復(fù)制使用前須知:
# 1)Redis復(fù)制是異步復(fù)制,但是可以配置連接的從節(jié)點(diǎn)數(shù)量。
# 2)當(dāng)連接斷開(kāi),Redis從節(jié)點(diǎn)支持部分重同步(psync)功能來(lái)保證主從節(jié)點(diǎn)數(shù)據(jù)同步。
# 3)復(fù)制過(guò)程是一個(gè)自動(dòng)化過(guò)程,無(wú)需人工干預(yù)。當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)后,從節(jié)點(diǎn)會(huì)自動(dòng)嘗試建立與主節(jié)點(diǎn)的連接,并嘗試同步。
# 建立主從連接的命令如下:
# slaveof masterip> masterport>
# 2 授權(quán)密碼
# 當(dāng)主節(jié)點(diǎn)開(kāi)啟密碼保護(hù)時(shí)(通過(guò)配置"requirepass" 命令),從節(jié)點(diǎn)必須在開(kāi)始復(fù)制同步前進(jìn)行授權(quán)操作,否則其請(qǐng)求不會(huì)被接受。
# 命令如下:
# masterauth master-password>
# 注意,該命令只有在主節(jié)點(diǎn)開(kāi)啟密碼保護(hù)時(shí)才生效。
# 3 從節(jié)點(diǎn)是否支持臟讀
# 當(dāng)主從斷開(kāi)連接或主從進(jìn)行復(fù)制時(shí),從節(jié)點(diǎn)對(duì)外擁有兩種策略:
# 1)如果“slave-serve-stale-data”參數(shù)設(shè)置成“yes”(默認(rèn)情況下),則從節(jié)點(diǎn)可以響應(yīng)客戶端請(qǐng)求,盡管可能會(huì)恢復(fù)過(guò)期數(shù)據(jù)或空數(shù)據(jù)(如果主從第一次進(jìn)行同步)。
# 2)如果“slave-serve-stale-data”參數(shù)設(shè)置成“no”,則從節(jié)點(diǎn)會(huì)對(duì)除INFO 和SLAVEOF之外的命令返回"SYNC with master in progress"信息。
# 默認(rèn)設(shè)置如下:
slave-serve-stale-data yes
# 4 從節(jié)點(diǎn)是否支持寫(xiě)入
# 指定從節(jié)點(diǎn)是否支持寫(xiě)操作。當(dāng)需要存儲(chǔ)一些臨時(shí)數(shù)據(jù)時(shí),讓從節(jié)點(diǎn)支持寫(xiě)操作很有用。這樣一來(lái),就可以通過(guò)主從同步輕松的將已寫(xiě)入從節(jié)點(diǎn)的數(shù)據(jù)刪除。但是,如果配置出錯(cuò),也會(huì)出現(xiàn)客戶端寫(xiě)入出錯(cuò)等問(wèn)題。
# 注意,從Redis 2.6之后,從節(jié)點(diǎn)默認(rèn)是只讀的。
# 提示,只讀的從服務(wù)器并不是設(shè)計(jì)給非信任的互聯(lián)網(wǎng)客戶端提供服務(wù)。這種模式的服務(wù)器設(shè)置只是一個(gè)用來(lái)防止對(duì)服務(wù)器實(shí)例進(jìn)行誤操作的保護(hù)層。默認(rèn)情況下,只讀從服務(wù)器能夠輸出管理員命令,如CONFIG、 DEBUG等。如果想限制只讀從節(jié)點(diǎn)輸出的管理型命令,可以通過(guò)'rename-command' 命令來(lái)隱藏這些管理員命令或危險(xiǎn)命令。
# 提高它的安全性,使得她作為一個(gè)影子來(lái)執(zhí)行管理或者危險(xiǎn)的命令。默認(rèn)設(shè)置如下:
slave-read-only yes
# 5 復(fù)制策略:有無(wú)磁盤(pán)
# 主從節(jié)點(diǎn)的數(shù)據(jù)同步策略有兩種:磁盤(pán)同步、套接字同步。
# ——————————————————-
# WARNING: 無(wú)磁盤(pán)復(fù)制(DISKLESS REPLICATION I)當(dāng)前仍處于實(shí)驗(yàn)階段
# ——————————————————-
#
# 對(duì)于新連接的slaves或斷開(kāi)重連的slaves將無(wú)法執(zhí)行“部分同步”,需要進(jìn)行一次完全同# 步。當(dāng)進(jìn)行完全同步時(shí),主節(jié)點(diǎn)將傳播一個(gè)RDB文件給從節(jié)點(diǎn)。該RDB文件的傳播方式# 有兩種:
# 1)基于磁盤(pán):Redis主節(jié)點(diǎn)創(chuàng)建一個(gè)新進(jìn)程將RDB文件寫(xiě)到磁盤(pán),然后將生成的RDB文件傳播給從節(jié)點(diǎn)。
# 2)無(wú)磁盤(pán):Redis主節(jié)點(diǎn)創(chuàng)建一個(gè)新進(jìn)程直接將RDB文件寫(xiě)到slaves的套接字中,RDB文件無(wú)需落盤(pán)。
# 基于磁盤(pán)的復(fù)制,一旦RDB文件生成,多個(gè)slaves將排隊(duì)等待并可以共享該文件。而無(wú)磁盤(pán)復(fù)制一旦開(kāi)始傳輸數(shù)據(jù),新slaves到來(lái)后將會(huì)排隊(duì)等待。
# 在使用無(wú)磁盤(pán)復(fù)制時(shí),主節(jié)點(diǎn)在開(kāi)始傳輸同步數(shù)據(jù)前將根據(jù)配置的時(shí)間進(jìn)行等待,從而實(shí)現(xiàn)多個(gè)從節(jié)點(diǎn)的并發(fā)傳輸。
# 在磁盤(pán)速度緩慢且網(wǎng)絡(luò)速度很快(高帶寬)時(shí),無(wú)磁盤(pán)復(fù)制效率更高。默認(rèn)情況下,無(wú)磁盤(pán)復(fù)制同步關(guān)閉。配置如下:
repl-diskless-sync no
# 6 無(wú)磁盤(pán)復(fù)制等待時(shí)間
# 無(wú)磁盤(pán)復(fù)制前,主節(jié)點(diǎn)需要等待的時(shí)間。該配置在啟用無(wú)磁盤(pán)復(fù)制時(shí)將生效。
# 由于一旦開(kāi)啟一次數(shù)據(jù)傳輸,其余slaves將排隊(duì)等待,所以最好讓主節(jié)點(diǎn)等待一段時(shí)間,這樣主節(jié)點(diǎn)就可對(duì)多個(gè)slaves并發(fā)傳播數(shù)據(jù)。
# 等待的單位是秒(second),默認(rèn)是5秒。一旦將其設(shè)置為0,主節(jié)點(diǎn)將會(huì)馬上開(kāi)始數(shù)據(jù)傳輸。默認(rèn)配置如下:
repl-diskless-sync-delay 5
# 7 slaves定時(shí)向master發(fā)送PING的時(shí)間片
# 默認(rèn)情況下,slaves每10秒向master發(fā)送一次PING消息。可以根據(jù)網(wǎng)絡(luò)等因素進(jìn)行設(shè)置。該配置默認(rèn)在配置文件中關(guān)閉:
# repl-ping-slave-period 10
# 8 復(fù)制超時(shí)閾值
# 以下情境將使用到復(fù)制超時(shí)閾值:
# 1) 從節(jié)點(diǎn)在執(zhí)行SYNC期間,檢測(cè)塊文件傳輸超時(shí)
# 2) 從節(jié)點(diǎn)檢測(cè)主節(jié)點(diǎn)離線(data、pings)
# 3) 主節(jié)點(diǎn)檢測(cè)從節(jié)點(diǎn)離線(REPLCONF ACK)
# 必須要確保復(fù)制超時(shí)閾值(repl-timeout)大于slaves定時(shí)向master發(fā)送PING的時(shí)間片(repl-ping-slave-period),否則將總會(huì)檢測(cè)到復(fù)制超時(shí)(當(dāng)slave發(fā)送PING的時(shí)間片大于復(fù)制超時(shí)閾值時(shí),slave還未發(fā)送ping就會(huì)被定性為復(fù)制超時(shí))。使用格式如下:
# repl-timeout 60
# 9 TCP_NODELAY功能
# 執(zhí)行完SYNC后,是否要禁用TCP_NODELAY。
# 當(dāng)禁用該功能后,Redis會(huì)使用占用更少帶寬的小TCP包向從節(jié)點(diǎn)發(fā)送數(shù)據(jù)。但是這樣做將會(huì)增大從節(jié)點(diǎn)端數(shù)據(jù)傳輸延時(shí)。在Linux下禁用TCP_NODELAY功能將導(dǎo)致40 微秒的延遲。
# 當(dāng)啟動(dòng)該功能后,在進(jìn)行復(fù)制時(shí)將會(huì)減少數(shù)據(jù)傳輸延遲,但是會(huì)占用更大的帶寬。
# 默認(rèn)情況下,我們優(yōu)先選擇低延遲,但是在高速網(wǎng)絡(luò)或主從節(jié)點(diǎn)存在多hops路徑時(shí),建議禁用TCP_NODELAY功能。
# 默認(rèn)開(kāi)啟TCP_NODELAY功能。格式如下:
repl-disable-tcp-nodelay no
# 10 復(fù)制積壓緩沖區(qū)大小
# 設(shè)置復(fù)制積壓緩沖區(qū)(replication backlog)大小。當(dāng)slaves斷開(kāi)與節(jié)點(diǎn)連接后,Redis使用復(fù)制積壓緩沖區(qū)記錄需要未發(fā)送給slave的數(shù)據(jù)。當(dāng)從節(jié)點(diǎn)重連后,僅需執(zhí)行一次部分同步,將從節(jié)點(diǎn)缺失數(shù)據(jù)補(bǔ)全。
# 復(fù)制積壓緩沖區(qū)(replication backlog)越大,Redis可以支持的slave離線時(shí)間就越長(zhǎng)。復(fù)制積壓緩沖區(qū)用于部分重同步。
# 復(fù)制緩沖區(qū)只有在有slave連接時(shí)才分配內(nèi)存。沒(méi)有slave時(shí),該內(nèi)存會(huì)被釋放出來(lái),默認(rèn)大小為1m。格式如下:
# repl-backlog-size 1mb
# 11 復(fù)制積壓緩沖區(qū)釋放時(shí)間片
# 當(dāng)主節(jié)點(diǎn)不再有新連接的從節(jié)點(diǎn)后,復(fù)制積壓緩沖區(qū)將會(huì)被釋放。為避免因從節(jié)點(diǎn)頻繁掉線后上線而頻繁的進(jìn)行復(fù)制積壓緩沖區(qū)的釋放與申請(qǐng),Redis提供復(fù)制積壓緩沖區(qū)釋放時(shí)間片(repl-backlog-ttl)參數(shù),保證主節(jié)點(diǎn)在檢測(cè)到從節(jié)點(diǎn)掉線后的規(guī)定時(shí)間內(nèi)不會(huì)釋放該緩沖區(qū)。
# 值為零時(shí)表示不會(huì)釋放該復(fù)制積壓緩沖區(qū)。
# 單位為秒,配置如下:
# repl-backlog-ttl 3600
# 12 從節(jié)點(diǎn)優(yōu)先級(jí)
# 使用整數(shù)表示從節(jié)點(diǎn)優(yōu)先級(jí)。
# 當(dāng)主節(jié)點(diǎn)無(wú)法正常工作后,Sentinel將使用該優(yōu)先級(jí)在從節(jié)點(diǎn)中推選出新的主節(jié)點(diǎn)。
# 優(yōu)先級(jí)對(duì)應(yīng)的整數(shù)值越小,被推選成主節(jié)點(diǎn)的可能性更大。但是當(dāng)優(yōu)先級(jí)的值為零時(shí)表示該從節(jié)點(diǎn)不具備成為主節(jié)點(diǎn)的身份。
# 默認(rèn)優(yōu)先級(jí)為100。配置形式如下:
slave-priority 100
# 13 從節(jié)點(diǎn)連接數(shù)及從節(jié)點(diǎn)延時(shí)設(shè)置
# 當(dāng)主節(jié)點(diǎn)的已連接從節(jié)點(diǎn)數(shù)小于N且這些從節(jié)點(diǎn)延遲均大于M秒,該主節(jié)點(diǎn)將停止接收寫(xiě)請(qǐng)求。
# 從節(jié)點(diǎn)處于“online”狀態(tài),當(dāng)且僅當(dāng)延遲(通過(guò)計(jì)算距離上一次接收從節(jié)點(diǎn)的ping消息的時(shí)間間隔獲得)小于指定的閾值。
# 這個(gè)選項(xiàng)配置不是用來(lái)保證N個(gè)部分接收寫(xiě)信息,而是為了在沒(méi)有足夠的從節(jié)點(diǎn)可用時(shí),限制寫(xiě)丟失。
# 如需要至少需要3個(gè)從節(jié)點(diǎn)并在10s內(nèi)可用,則設(shè)置:
# min-slaves-to-write 3
# min-slaves-max-lag 10
# 一旦對(duì)這兩個(gè)中的一個(gè)賦值為零,則該功能失效。
# 默認(rèn)min-slaves-to-write 參數(shù)設(shè)置為0,即該功能默認(rèn)不啟用。
# 14 從節(jié)點(diǎn)指定的IP和port
# Redis主節(jié)點(diǎn)可以通過(guò)多種途徑顯示已連接從節(jié)點(diǎn)的IP和port。如Sentinel 可以使用“INFO replication”命令來(lái)發(fā)現(xiàn)從節(jié)點(diǎn)實(shí)例;Master可以使用“ROLE”命令顯示從節(jié)點(diǎn)IP和port信息等。
# slave獲取IP和port的方式是:
# IP:自動(dòng)檢測(cè)獲取。當(dāng)從節(jié)點(diǎn)連接主節(jié)點(diǎn)時(shí),通過(guò)檢查對(duì)應(yīng)套接字地址獲取。
# Port:從節(jié)點(diǎn)在復(fù)制中和主節(jié)點(diǎn)握手時(shí)需要使用到port。通常情況下,port即為連接時(shí)的port。
# 但是,當(dāng)發(fā)生端口轉(zhuǎn)發(fā)(port forwarding,轉(zhuǎn)發(fā)一個(gè)網(wǎng)絡(luò)端口從一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)到另一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)的行為)或使用NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)技術(shù)是,從節(jié)點(diǎn)需要被分配不同IP和port后才能被訪問(wèn)。
# 接下來(lái)的兩個(gè)配置用來(lái)設(shè)置從節(jié)點(diǎn)的IP和port,用來(lái)告知主節(jié)點(diǎn)所指定的IP和port,這樣INFO和ROLE 才能繼續(xù)返回結(jié)果。
# 當(dāng)需要重寫(xiě)IP和port時(shí),則無(wú)需配置該選項(xiàng)。
# 配置格式如下:
# slave-announce-ip 5.5.5.5
# slave-announce-port 1234

##############
# 安全配置:
# Redis提供一些安全策略,盡量保證訪問(wèn)安全性。
################################## SECURITY ###################################
#
# 1 認(rèn)證密碼
# Server在處理客戶端命令前,該客戶端需要提供提供認(rèn)證密碼。這在非可信網(wǎng)絡(luò)環(huán)境中很有用。
# 為減少后臺(tái)執(zhí)行復(fù)雜度,這個(gè)選項(xiàng)一般都會(huì)被注釋掉。因?yàn)榇蠖鄶?shù)用戶不需要授權(quán)。(如用戶使用自己的服務(wù)器)
# Warning: 由于Redis執(zhí)行高效,所以外部用戶每秒可以嘗試認(rèn)證15w次。也就是說(shuō),為避免密碼被快送攻破,用戶需要使用一個(gè)極其復(fù)雜的密碼。
# 設(shè)置認(rèn)證密碼格式如下:
# requirepass foobared
# 2 命令重命名
# 重命名命令。
# 在一個(gè)共享環(huán)境中有必要對(duì)危險(xiǎn)命令進(jìn)行重命令,從而避免危險(xiǎn)命令的濫用、無(wú)用。
# 如給CONFIG命令重新設(shè)置一個(gè)難以猜測(cè)的命令,這樣這個(gè)命令就很難被普通用戶使用的,但仍能被內(nèi)部工具使用。
# 如:
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
# 當(dāng)然,有時(shí)需要禁用一些命令??梢酝ㄟ^(guò)將命令置空實(shí)現(xiàn):
# rename-command CONFIG ""
# 注意,一定要避免重命名那些寫(xiě)AOF文件或傳輸數(shù)據(jù)給slaves的命令,否則將會(huì)導(dǎo)致各種難以預(yù)料的錯(cuò)誤。

###########
# 限制配置:
# 對(duì)一些參數(shù)范圍進(jìn)行限定。
################################### LIMITS ####################################
#
# 1 最大客戶端連接數(shù)
#設(shè)置某一時(shí)刻客戶端的并發(fā)連接數(shù)。默認(rèn)情況下,限制上限是1w。但是,如果Redis服務(wù)器沒(méi)有配置進(jìn)程文件limit,那么可允許連接的最大客戶端個(gè)數(shù)將被設(shè)置為當(dāng)前文件限制的最小值32(Redis會(huì)保留一部分文件給內(nèi)部用戶)。
# 一旦得到了連接上限,Redis將關(guān)閉所有新連接并發(fā)送錯(cuò)誤“max number of clients reached”提示。連接上限配置格式如下:
# maxclients 10000
# 2 最大可用內(nèi)存
# 不要再內(nèi)存超過(guò)指定限制時(shí)仍然使用內(nèi)存。
# 當(dāng)達(dá)到內(nèi)存上限時(shí),Redis會(huì)根據(jù)選定的過(guò)期鍵策略移除一些key。
# 如果根據(jù)過(guò)期鍵策略仍不能移除一些鍵或者過(guò)期鍵策略設(shè)置成“noeviction”(不啟用過(guò)期鍵策略),那么Redis會(huì)向如SET、LPUSH等使用內(nèi)存的命令返回錯(cuò)誤,向諸如GET等讀命令正常返回結(jié)果。
# 這個(gè)配置通常在將Redis當(dāng)過(guò)LRU 緩存或?qū)σ栽O(shè)置硬性的內(nèi)存上限的Redis很適用。
# WARNING: slaves的輸出緩沖區(qū)不在主節(jié)點(diǎn)的maxmemory計(jì)算中,所以設(shè)置的maxmemory不宜過(guò)大。如果過(guò)大,可能導(dǎo)致主機(jī)的剩余內(nèi)存過(guò)小,從而不能預(yù)留足夠的內(nèi)存用于創(chuàng)建slaves的輸出緩沖區(qū)。
# 簡(jiǎn)言之,如果當(dāng)前節(jié)點(diǎn)存在已連接的從節(jié)點(diǎn),建立設(shè)置一個(gè)較小的maxmemory上限,這樣系統(tǒng)就可以有多余的RAM用與創(chuàng)建從節(jié)點(diǎn)輸出緩存。(當(dāng)過(guò)期鍵策略設(shè)置成'noeviction'時(shí),則沒(méi)有必要這么做)
# 設(shè)置格式如下:
# maxmemory bytes>
# 3 內(nèi)存淘汰策略
# MAXMEMORY POLICY: 當(dāng)達(dá)到maxmemory時(shí),可以采用的內(nèi)存淘汰策略。
# Redis提供五種內(nèi)存淘汰策略:
# volatile-lru:利用LRU算法移除過(guò)期keys。
# allkeys-lru:利用LRU算法移除keys。
# volatile-random:隨機(jī)移除過(guò)期keys。
# allkeys-random:隨機(jī)移除keys。
# volatile-ttl:按照最近過(guò)期時(shí)間來(lái)刪除(輔以TTL),移除即將過(guò)期的keys。
# noeviction:不移除任何key,只是返回一個(gè)寫(xiě)錯(cuò)誤。
# Note: 不管采用了上述何種淘汰策略,當(dāng)沒(méi)有合適的鍵進(jìn)行移除時(shí),Redis仍會(huì)返回寫(xiě)錯(cuò)誤。
# 這些寫(xiě)命令是: 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
# 默認(rèn)內(nèi)存淘汰策略是'noeviction'。
# 4 最大樣例檢測(cè)數(shù)
# LRU算法和最小TTL算法都不是精確算法,所以可以對(duì)其進(jìn)行執(zhí)行速度或精確度上的判定。
# 默認(rèn)情況下,Redis會(huì)從五個(gè)鍵中選擇一個(gè)最近最久未使用的鍵進(jìn)行淘汰。可以通過(guò)配置該選擇設(shè)置檢測(cè)基數(shù)。
# 一般情況下,五個(gè)檢測(cè)樣本可以獲得足夠好的結(jié)果。10個(gè)樣本的結(jié)果更接近LRU算法,但是會(huì)消耗更多的CPU。3個(gè)樣本可以獲得較高的執(zhí)行速度但是不夠精確。
# 配置格式如下:
# maxmemory-samples 5

##############
# AOF配置:
# AOF持久化模式對(duì)應(yīng)的一些配置。
############################## APPEND ONLY MODE ###############################
#
# 1 是否開(kāi)啟AOF持久化功能
# 默認(rèn)情況下,Redis會(huì)異步將數(shù)據(jù)集快照到磁盤(pán)上。盡管這種模式對(duì)許多應(yīng)用友好,但是當(dāng)Redis進(jìn)程崩潰或發(fā)生掉電時(shí),幾分鐘內(nèi)的寫(xiě)信息將丟失(根據(jù)快照?qǐng)?zhí)行的粒度)。
# AOF作為一種可替換的持久化策略,能夠提供更好的耐久性。如使用默認(rèn)的fsync策略,Redis僅會(huì)丟失1s的寫(xiě)信息,當(dāng)發(fā)生突發(fā)事件(服務(wù)器掉電、服務(wù)器進(jìn)程崩潰但OS運(yùn)行正常)
# AOF持久化和RDB持久化可以同時(shí)開(kāi)啟。如果在啟動(dòng)Redis時(shí)已經(jīng)存在AOF文件,則會(huì)直接加載AOF文件(考慮到AOF文件相比RDB文件有更好的耐久性)。
# 關(guān)于AOF的更多訊息見(jiàn): http://redis.io/topics/persistence
# 默認(rèn)AOF關(guān)閉,配置如下:
appendonly no
# 2 指定AOF文件名稱
# 指定AOF文件名稱,默認(rèn)是appendonly.aof。配置如下:
appendfilename "appendonly.aof"
# 3 fsync()系統(tǒng)函數(shù)調(diào)用頻率
# 調(diào)用fsync()系統(tǒng)函數(shù)用來(lái)告知OS將數(shù)據(jù)寫(xiě)入磁盤(pán),而不是在輸出緩沖區(qū)等待數(shù)據(jù)。有些OS將直接flush數(shù)據(jù)到磁盤(pán),有些其他的OS僅會(huì)嘗試去flush。
# Redis支持三種fsync()調(diào)用模式:
# no:不執(zhí)行fsync,由OS決定flush數(shù)據(jù)的頻率。高效。Linux下默認(rèn)是每30s執(zhí)行一次flush。
# always:每寫(xiě)入一次AOF就調(diào)用一次fsync。慢,最安全。
# everysec:每秒調(diào)用一次fsync。適中。
# 默認(rèn)fsync的調(diào)用頻率是“everysec”,這種策略在執(zhí)行速度和數(shù)據(jù)安全進(jìn)行折中。
# 當(dāng)可以容忍一定程度數(shù)據(jù)丟失并期望更高的性能時(shí),可以使用“no”策略(由操作系統(tǒng)決定flush的頻率)。相反的,如果不能容忍數(shù)據(jù)丟失,可以使用“always”獲得更好的安全性,盡管執(zhí)行更慢。
# 更多AOF信息可以參考:
# http://antirez.com/post/redis-persistence-demystified.html
# 在無(wú)法確定fsync調(diào)用頻率時(shí),推薦使用“everysec”策略。
# 在開(kāi)啟AOF持久化功能后,該配置才會(huì)生效。
# 配置設(shè)置如下:
# appendfsync always
appendfsync everysec
# appendfsync no
# 4 AOF rewrite與fsync
# 當(dāng)AOF執(zhí)行fsync的策略是always和everysec時(shí),如果此時(shí)有一個(gè)后臺(tái)進(jìn)程(BGSAVE進(jìn)程或AOF rewrite進(jìn)程)正在執(zhí)行大量的I/O操作到磁盤(pán),在一些Linux系統(tǒng)中,執(zhí)行fsync會(huì)造成較長(zhǎng)的阻塞。當(dāng)前對(duì)這種情況還沒(méi)有很好的解決策略,即使在不同的線程中執(zhí)行fsync也會(huì)導(dǎo)致調(diào)用同步write(2)阻塞。
# 為了緩解上述問(wèn)題,可以通過(guò)配置下述選項(xiàng)來(lái)避免在主線程調(diào)用fsync()時(shí)執(zhí)行BGSAVE或 BGREWRITEAOF帶來(lái)的阻塞。
# 也就是說(shuō),默認(rèn)情況下,當(dāng)子進(jìn)程執(zhí)行BGSAVE或BGREWRITEAOF時(shí),Redis的耐久性將默認(rèn)轉(zhuǎn)變成"appendfsync none"。在實(shí)際的應(yīng)用中就意味著在最壞的場(chǎng)景下將丟失30s的數(shù)據(jù),即使配置了fsync調(diào)用頻率為always或everysec。(默認(rèn)情況下,Linux每30s自動(dòng)調(diào)用一次fsync將緩存數(shù)據(jù)flush到磁盤(pán))
# 如果當(dāng)前應(yīng)用已考慮延遲問(wèn)題,則將該配置設(shè)置成“yes”。否則使用默認(rèn)配置(“no”),這是從耐久性角度考慮的最安全的選擇。
no-appendfsync-on-rewrite no
# 上述配置等價(jià)于appendfsync-on-rewrite(在rewrite時(shí)仍執(zhí)行fsync)
# 4 AOF rewrite觸發(fā)時(shí)機(jī)
# 設(shè)置AOF 重寫(xiě)的觸發(fā)條件。
# 當(dāng)AOF日志按照指定的比例增長(zhǎng)時(shí),可以通過(guò)調(diào)用BGREWRITEAOF執(zhí)行自動(dòng)的AOF rewrite。
# 工作原理:Redis通過(guò)對(duì)比上一次執(zhí)行rewrite時(shí)AOF文件的大小與當(dāng)前AOF文件大小(在重啟時(shí)將沒(méi)有上一次執(zhí)行rewrite的記錄,這時(shí)將使用startup時(shí)的AOF文件大小),決定是否進(jìn)行rewrite。
# 如果當(dāng)前AOF對(duì)于上一次執(zhí)行rewrite的AOF文件的增長(zhǎng)比率大于指定的比率,將會(huì)觸發(fā)一次rewrite。
# 當(dāng)然,還需指定一個(gè)AOF進(jìn)行重寫(xiě)的最小單位。這樣做可以避免增長(zhǎng)比率已經(jīng)達(dá)到要求,但對(duì)應(yīng)的AOF仍很小的情況(這種情況下沒(méi)有必要進(jìn)行rewrite)的發(fā)生。
# 如果想要關(guān)閉自動(dòng)AOF rewrite功能,可將進(jìn)行rewrite要求的增長(zhǎng)比率設(shè)置0。
# 默認(rèn)當(dāng)AOF大于64MB且相比于上一次rewrite,AOF以擴(kuò)充了兩倍時(shí)會(huì)觸發(fā)一次rewrite執(zhí)行。默認(rèn)配置如下:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 5 AOF 文件不完整
# 在將AOF文件加載到內(nèi)存時(shí)(重啟Redis),可能會(huì)出現(xiàn)AOF被截?cái)嗟那闆r。
# 如當(dāng)Redis運(yùn)行所在系統(tǒng)突然崩潰(當(dāng)ext4文件系統(tǒng)在安裝時(shí)沒(méi)有配置成數(shù)據(jù)按序存儲(chǔ)),會(huì)出現(xiàn)AOF被截?cái)嗲闆r。
# 如果Redis程序發(fā)生崩潰或異常,但操作系統(tǒng)仍能正常工作,則不會(huì)出現(xiàn)AOF被截?cái)嗟那闆r。
# 出現(xiàn)AOF被截?cái)嗪?,Redis要么直接退出并返回錯(cuò)誤,要么加載被截?cái)郃OF中盡可能多的數(shù)據(jù)(當(dāng)前默認(rèn)方式)。
# 可以通過(guò)aof-load-truncated選項(xiàng)進(jìn)行配置
# 當(dāng)aof-load-truncated設(shè)置成“yes”,Redis仍會(huì)加載一個(gè)被截?cái)嗟腁OF文件,同時(shí)向用戶報(bào)告AOF文件被截?cái)?。如果設(shè)置成“no”,Redis會(huì)直接返回錯(cuò)誤并拒絕啟動(dòng),這時(shí)用戶需要使用"redis-check-aof"程序修復(fù)AOF,只有這樣才能重啟Server。
# 注意,如果AOF文件在執(zhí)行一半時(shí)就出現(xiàn)問(wèn)題,即使設(shè)置aof-load-truncated為 “yes”,Redis也會(huì)直接退出并返回錯(cuò)誤。
# 這個(gè)配置僅在Redis嘗試從AOF文件讀更多數(shù)據(jù)但發(fā)現(xiàn)沒(méi)有足夠字計(jì)數(shù)存在時(shí)有意義。
# 默認(rèn)開(kāi)啟該功能。
aof-load-truncated yes

#############
# LUA腳本處理:
################################ LUA SCRIPTING ###############################
#
# 1 Lua腳本執(zhí)行超時(shí)閾值
# 設(shè)置Lua腳本執(zhí)超時(shí)的時(shí)間上限,單位是毫秒,milliseconds。
# 當(dāng)Lua腳本執(zhí)行超時(shí),Redis會(huì)記錄腳本執(zhí)行之后的結(jié)果(超時(shí)后)并向查詢返回錯(cuò)誤。
# 當(dāng)一個(gè)長(zhǎng)時(shí)腳本執(zhí)行時(shí)間超過(guò)最大執(zhí)行時(shí)間時(shí),只有SCRIPT KILL和 SHUTDOWN NOSAVE 命令可用。停止這類腳本運(yùn)行的第一個(gè)方法是調(diào)用一個(gè)非寫(xiě)命令。第二種方法是shut down 這個(gè)server,如果已經(jīng)發(fā)送了一個(gè)寫(xiě)命令但用戶并不想等待腳本自然終止。
# 如果想不限制腳本的執(zhí)行時(shí)間并且不需要返回warning,可以將該參數(shù)設(shè)置成0或負(fù)數(shù)。
# 默認(rèn)配置如下:
lua-time-limit 5000

###############
#Redis 集群配置:
################################ REDIS CLUSTER ###############################
#
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# WARNING EXPERIMENTAL: 盡管當(dāng)前Redis Cluster代碼已經(jīng)穩(wěn)定,但是為了將這部分代碼水準(zhǔn)標(biāo)記為“mature”,
# 仍需要一批有分量的用戶將該功能應(yīng)用到生產(chǎn)環(huán)境。即Redis Cluster功能仍需要生產(chǎn)實(shí)踐的考驗(yàn)。
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 1 啟動(dòng)Redis集群功能
# 正常情況下,啟動(dòng)的Redis實(shí)例為非集群模式。只有當(dāng)節(jié)點(diǎn)配置成集群模式時(shí)才能成為集群節(jié)點(diǎn)。如需以集群模式啟動(dòng),取消下述配置的注釋即可:
# cluster-enabled yes
# 2 集群配置文件命令
# 每個(gè)集群節(jié)點(diǎn)都有一個(gè)集群配置文件。該文件不是用來(lái)讓用戶編輯,而是持久化集群信息。
# 該文件由集群節(jié)點(diǎn)創(chuàng)建并更新。每個(gè)Redis 集群節(jié)點(diǎn)都需要有唯一的集群配置文件。所以在同一系統(tǒng)創(chuàng)建的多個(gè)Redis實(shí)例需要確保不存在配置文件名相同的情況發(fā)生(這樣會(huì)導(dǎo)致集群配置文件重載)。
# 集群配置文件命令格式如下:
# cluster-config-file nodes-6379.conf
# 3 集群節(jié)點(diǎn)超時(shí)閾值
# 集群節(jié)點(diǎn)超時(shí)閾值用來(lái)作為節(jié)點(diǎn)不可達(dá)并被標(biāo)記為失效狀態(tài)的超時(shí)上限,單位是毫秒(millisecond)
# 大部分其他內(nèi)部時(shí)間將其基本參考數(shù)。
# 設(shè)置方式如下:
# cluster-node-timeout 15000
# 4 從節(jié)點(diǎn)可發(fā)起故障轉(zhuǎn)移的判定因子(slave-validity-factor)
# 當(dāng)主節(jié)點(diǎn)失效后,Redis避免讓存儲(chǔ)數(shù)據(jù)過(guò)舊的從節(jié)點(diǎn)發(fā)起故障轉(zhuǎn)移。
# 沒(méi)有簡(jiǎn)單的方式可以直接準(zhǔn)確判定從節(jié)點(diǎn)的”data age”,可以通過(guò)下面兩個(gè)方面的檢測(cè)實(shí)現(xiàn):
# 1) 如果有多個(gè)從節(jié)點(diǎn)可以發(fā)起故障轉(zhuǎn)移,可以讓他們交換信息以選出數(shù)據(jù)狀態(tài)最節(jié)點(diǎn)主節(jié)點(diǎn)的從節(jié)點(diǎn)。從節(jié)點(diǎn)可以通過(guò)offset進(jìn)行排名并通過(guò)該排名延遲發(fā)起故障轉(zhuǎn)移的時(shí)機(jī)。
# 2) 每個(gè)獨(dú)立的從節(jié)點(diǎn)計(jì)算最近一次與主節(jié)點(diǎn)交互的時(shí)間。這里的交互可以是最近一次PING、最近一次接收到來(lái)自主節(jié)點(diǎn)的命令、與主節(jié)點(diǎn)斷開(kāi)連接的時(shí)間(當(dāng)復(fù)制鏈接已經(jīng)down掉時(shí))。如果最近一次與主節(jié)點(diǎn)的交互已經(jīng)足夠久遠(yuǎn),那么這個(gè)從節(jié)點(diǎn)將放棄進(jìn)行故障轉(zhuǎn)移。
# 在2)中的時(shí)間閾值可以由用戶設(shè)定。特別地,當(dāng)從節(jié)點(diǎn)的最近一次與主節(jié)點(diǎn)的交互遠(yuǎn)大于(node-timeout * slave-validity-factor) + repl-ping-slave-period 時(shí),這個(gè)從節(jié)點(diǎn)將不會(huì)執(zhí)行故障轉(zhuǎn)移。
# 例如假設(shè)node-timeout為30秒,slave-validity-factor參數(shù)為10,repl-ping-slave-period 為10秒,當(dāng)從節(jié)點(diǎn)距離最近一次與主節(jié)點(diǎn)的交互時(shí)間大于310秒(30*10+10)時(shí),該從節(jié)點(diǎn)不能進(jìn)行故障轉(zhuǎn)移。
# 一個(gè)過(guò)大的從節(jié)點(diǎn)有效因子(slave-validity-factor)會(huì)允許存儲(chǔ)過(guò)舊數(shù)據(jù)的從節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移,而一個(gè)過(guò)小的從節(jié)點(diǎn)有效因子將會(huì)妨礙集群選擇從節(jié)點(diǎn)成為新的主節(jié)點(diǎn)。
# 所以合理的設(shè)置從節(jié)點(diǎn)有效因子很重要。
# 為了獲得最大的可用性,可以將從節(jié)點(diǎn)有效因子(slave-validity-factor)賦值為0。也就是說(shuō),從節(jié)點(diǎn)忽略距離最近一次與主節(jié)點(diǎn)交互的時(shí)間段,則是直接點(diǎn)嘗試發(fā)起故障轉(zhuǎn)移。(但是這種策略下,這些從節(jié)點(diǎn)仍會(huì)根據(jù)offset的排名來(lái)推遲發(fā)起故障轉(zhuǎn)移的時(shí)間)
# 從節(jié)點(diǎn)有效因子(slave-validity-factor)值為0是唯一可以保證網(wǎng)絡(luò)分區(qū)消失后,集群仍繼續(xù)工作的值。
# 設(shè)置格式如下:
# cluster-slave-validity-factor 10
# 5 從節(jié)點(diǎn)遷移屏蔽因子(cluster-migration-barrier)
# Redis集群支持將從節(jié)點(diǎn)遷移到孤立主節(jié)點(diǎn)(orphaned masters),沒(méi)有可以工作從節(jié)點(diǎn)的主節(jié)點(diǎn))。該功能減少了集群孤立主節(jié)點(diǎn)故障但沒(méi)有可工作從節(jié)點(diǎn)進(jìn)行故障轉(zhuǎn)移的情況的發(fā)生。
# 從節(jié)點(diǎn)可以遷移到孤立主節(jié)點(diǎn)當(dāng)且僅當(dāng)原來(lái)的主節(jié)點(diǎn)的剩余可工作從節(jié)點(diǎn)個(gè)數(shù)大于等于指定的可工作從節(jié)點(diǎn)數(shù)。這個(gè)數(shù)稱為從節(jié)點(diǎn)遷移屏蔽因子(migration barrier)。當(dāng)遷移屏蔽因子設(shè)置為1時(shí),當(dāng)且僅當(dāng)主節(jié)點(diǎn)擁有至少兩個(gè)可工作的從節(jié)點(diǎn)才允許其中從節(jié)點(diǎn)遷移到孤立主節(jié)點(diǎn)(orphaned masters)。該因子通常用來(lái)表明使用者需要為集群中的主節(jié)點(diǎn)配置從節(jié)點(diǎn)個(gè)數(shù)。
# 默認(rèn)遷移屏蔽因子是1(從節(jié)點(diǎn)可以執(zhí)行遷移當(dāng)前僅當(dāng)其主節(jié)點(diǎn)在該節(jié)點(diǎn)遷移后仍保有至少一個(gè)從節(jié)點(diǎn))。如果想關(guān)閉該功能,只需將該參數(shù)設(shè)置成一個(gè)極大值即可。
# 允許將遷移屏蔽因子置零。這種行為僅在調(diào)試時(shí)有用,且在生產(chǎn)環(huán)境中存在極大風(fēng)險(xiǎn)。
# 配置格式如下:
# cluster-migration-barrier 1
# 6 是否支持集群部分可用
# 默認(rèn)情況下,Redis集群將停止接收客戶端請(qǐng)求(停止服務(wù))當(dāng)集群檢測(cè)到存在哈希槽沒(méi)有對(duì)應(yīng)負(fù)責(zé)的節(jié)點(diǎn)。也就是說(shuō),如果集群部分down(如有一部分哈希槽沒(méi)有對(duì)應(yīng)的節(jié)點(diǎn)),整個(gè)集群最終將會(huì)不可用。(集群信息傳播遵循最終一致性)
# 當(dāng)所有的槽都再次有對(duì)應(yīng)負(fù)責(zé)的節(jié)點(diǎn)后,集群將會(huì)自動(dòng)再次可用。
# 但是有時(shí)希望即使集群只有部分槽有對(duì)應(yīng)的節(jié)點(diǎn),集群也能繼續(xù)接受客戶端請(qǐng)求并處理對(duì)應(yīng)的鍵空間。為了達(dá)到上述目的,將ecluster-require-full-coverage 設(shè)置為“no”即可。
# 配置格式如下:
# cluster-require-full-coverage yes
# 創(chuàng)建集群的指導(dǎo)文檔在http://redis.io 網(wǎng)站可以獲得。
#

############
# 慢日志配置:
################################## SLOW LOG ###################################
#
# 1 命令執(zhí)行超時(shí)上限
# Redis慢日志系統(tǒng)用來(lái)記錄執(zhí)行時(shí)間較長(zhǎng)的查詢。這里的執(zhí)行時(shí)間(“execution time”)不包括IO操作時(shí)間,如接收客戶端的請(qǐng)求,返回請(qǐng)求結(jié)果等,而是實(shí)際執(zhí)行命令的時(shí)間(此時(shí)線程處于阻塞狀態(tài),僅能執(zhí)行該命令,不能同時(shí)處理其他請(qǐng)求)
# 可以使用兩個(gè)參數(shù)配置慢日志:一個(gè)參數(shù)告知Redis執(zhí)行時(shí)間超時(shí)閾值(單位是微秒,microseconds),這樣一旦某個(gè)執(zhí)行時(shí)間超過(guò)指定上限,將會(huì)被記錄到慢日志中;另一個(gè)參數(shù)是慢日志的長(zhǎng)度。慢日志使用環(huán)式結(jié)構(gòu)存儲(chǔ)超時(shí)命令。(當(dāng)慢日志滿后,新命令添加進(jìn)去后,最老的命令將被踢出)
# 單位是微秒(microsecond,106微秒等于1秒)。當(dāng)該值為負(fù)數(shù)時(shí)表示禁用slow log功能。當(dāng)該值為零時(shí),表示強(qiáng)制使用slow log記錄每一條命令。
# 默認(rèn)慢日志功能是開(kāi)啟的,slowlog-log-slower-than時(shí)間上限是104微秒。
slowlog-log-slower-than 10000
# 2 慢日志長(zhǎng)度
# slow log保存在內(nèi)存中,只要內(nèi)存容量足夠,可以隨意設(shè)定慢日志長(zhǎng)度。可以使用SLOWLOG RESET命令重新設(shè)置慢日志長(zhǎng)度。
# 默認(rèn)設(shè)置如下:
slowlog-max-len 128

##############
# 延遲監(jiān)測(cè)配置:
################################ LATENCY MONITOR ###############################
#
# 1 設(shè)置操作延遲判定上限
# Redis 延遲監(jiān)測(cè)自系統(tǒng)通過(guò)對(duì)執(zhí)行期間的操作的檢測(cè)來(lái)收集與延遲相關(guān)的數(shù)據(jù)。
# 通過(guò)使用LATENCY命令,Redis用戶可以獲得延遲相關(guān)的圖形、報(bào)告等信息。
# 延遲系統(tǒng)只會(huì)記錄大于等于設(shè)置的latency-monitor-threshold值的操作。當(dāng)該值為零時(shí),
# 則表明關(guān)閉latency monitor。
#
# 默認(rèn)情況下,latency monitor功能是關(guān)閉的,因?yàn)榇蠖鄶?shù)場(chǎng)景下并不需要該功能。
# latency monitor可以在Redis運(yùn)行時(shí)通過(guò)"CONFIG SET latency-monitor-threshold
# milliseconds>"啟動(dòng)。
# latency monitor設(shè)置格式如下:
latency-monitor-threshold 0

##############
# 事件通知配置:
############################# EVENT NOTIFICATION ##############################
#
# 1 設(shè)置事件通知
# Redis 可以通知那些已Pub/Sub客戶端鍵空間發(fā)生的事件。
# 該功能對(duì)應(yīng)的文檔是http://redis.io/topics/notifications
# 例如,如果開(kāi)啟鍵空間通知功能且一個(gè)客戶端對(duì)0號(hào)數(shù)據(jù)庫(kù)上的“foo”key執(zhí)行DEL操作,那么Redis將使用Pub/Sub發(fā)送兩條消息:
# PUBLISH __keyspace@0__:foo del
# PUBLISH __keyevent@0__:del foo
# Redis對(duì)通知的事件進(jìn)行了分類,每一類都使用唯一的字符標(biāo)記:
# K 鍵空間(Key)通知,前綴為:__keyspace@db>__
# E 鍵事件(Event)通知,前綴為:__keyevent@db>__
# 對(duì)于所有命令類型和非鍵事件,均使用小寫(xiě)字母表示,且沒(méi)有前綴。
# g 一般命令(Generic commands),如DEL, EXPIRE, RENAME等
# $ 字符串(String)命令
# l 列表(list)命令
# s 集合(set)命令
# h 哈希(hash)命令
# z 有序集合(sorted set)命令
# x 過(guò)期事件(過(guò)期鍵產(chǎn)生的事件)
# e 驅(qū)逐事件(因maxmemory而驅(qū)逐的事件)
# A g$lshzxe等類型的別稱(Alias),如此一來(lái)就可以使用"AKE"代表所有的事件類型
# notify-keyspace-events 可以指定多個(gè)字符組成的字符串或空串。其中空串代表關(guān)閉通知功能。
# 例1:為了開(kāi)啟List事件和Genetic事件(從事件名稱分類來(lái)說(shuō)),可以使用如下設(shè)置:
# notify-keyspace-events Elg
# 例2:為了獲取過(guò)期鍵的信息并發(fā)送到訂閱的頻道,即__keyevent@0__:expired use信息,可設(shè)置如下:
# notify-keyspace-events Ex
# 默認(rèn)情況下,事件通知功能是關(guān)閉的,因?yàn)榇蠖鄶?shù)用戶并不需要這個(gè)功能且這個(gè)功能會(huì)帶來(lái)額外的性能開(kāi)銷。
# 注意,如果沒(méi)有指定鍵空間(K)通知還是鍵事件(E)通知,那么任何事件通知都不會(huì)被傳送。
# 默認(rèn)設(shè)置如下:
notify-keyspace-events ""

############
# 高級(jí)配置:
############################### ADVANCED CONFIG ###############################
#
# 1 Hash類型
# Hash數(shù)據(jù)類型的底層實(shí)現(xiàn)有壓縮鏈表(ziplist)和哈希表(hash)。當(dāng)且僅當(dāng)存儲(chǔ)的數(shù)據(jù)量小于hash-max-ziplist-entries且節(jié)點(diǎn)占用的容量小于hash-max-ziplist-value時(shí)才使用小數(shù)據(jù)量存儲(chǔ)高效的ziplist結(jié)構(gòu)存儲(chǔ)。否則,使用哈希結(jié)構(gòu)存儲(chǔ)。
# 可以通過(guò)下述指令設(shè)置閾值:
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
# 2 List類型
# List類型也可以通過(guò)特殊的方式來(lái)節(jié)省空間。
# 每個(gè)內(nèi)部list節(jié)點(diǎn)允許存儲(chǔ)的entries數(shù)量可以指定為已修訂最大數(shù)量或最大元素?cái)?shù)。
# 如指定-5到-1,其含義是:
# -5: max size: 64 Kb – 對(duì)于普通的工作負(fù)載,不建議使用
# -4: max size: 32 Kb – 不建議使用
# -3: max size: 16 Kb – 有時(shí)不建議使用
# -2: max size: 8 Kb – good
# -1: max size: 4 Kb – good
# 整數(shù)代表每個(gè)list節(jié)點(diǎn)準(zhǔn)確存儲(chǔ)指定數(shù)量的elements
# 最高效的參數(shù)設(shè)置是-2 (8 Kb size) 或 -1 (4 Kb size)
# 但是,如果需求很特殊,則應(yīng)根據(jù)需要調(diào)整參數(shù):
list-max-ziplist-size -2

# 3 List類型壓縮深度設(shè)置
# List可以實(shí)現(xiàn)壓縮
# 壓縮深度是劃定quicklist、ziplist等list在壓縮時(shí)的節(jié)點(diǎn)范圍。為了進(jìn)行快速的push/pop操作,不會(huì)對(duì)list的head和tail進(jìn)行壓縮,只會(huì)對(duì)中間節(jié)點(diǎn)進(jìn)行壓縮。參數(shù)設(shè)置如下:
# 0: 關(guān)閉list壓縮功能
# 1: 深度為1表示只有當(dāng)list添加一個(gè)節(jié)點(diǎn)(無(wú)論從head還是tail添加該節(jié)點(diǎn))后才開(kāi)始進(jìn)行壓縮。
# 所以對(duì)于[head]->node->node->…->node->[tail]
# 只有黑體部分加入才會(huì)執(zhí)行壓縮操作。
# 2: 深度為2
# 對(duì)于鏈表:[head]->[next]->node->node->…->node->[prev]->[tail]
# 不會(huì)壓縮head 或 head->next 或 tail->prev 或 tail,而僅壓縮剩余部分。
# 3: 深度為3
# [head]->[next]->[next]->node->node->…->node->[prev]->[prev]->[tail]
# 設(shè)置格式如下:
list-compress-depth 0
# 4 集合(intset)類型
# Set數(shù)據(jù)類型的底層實(shí)現(xiàn)默認(rèn)是intSet,也可以是hash。
# Set使用hash編碼格式當(dāng)且僅當(dāng)字符串組成的set變成底數(shù)為10的整數(shù),且其值范圍在64位整數(shù)中。
# 下面的配置設(shè)置用來(lái)指定set可以使用特殊編碼格式的閾值:
set-max-intset-entries 512
# 5 Sorted Set類型
# Sorted Set默認(rèn)使用ziplist實(shí)現(xiàn),也可通過(guò)skiplist編碼實(shí)現(xiàn)來(lái)節(jié)省空間。
# 當(dāng)且僅當(dāng)Sorted Set中元素值大于zset-max-ziplist-value、元素?cái)?shù)量大于zset-max-ziplist-entries時(shí),才使用skiplist實(shí)現(xiàn)Sorted Set。
# 參數(shù)設(shè)置如下:
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# 6 HyperLogLog稀疏表示
# HyperLogLog稀疏表示閾值。16位的header部分也在limit中。當(dāng)使用稀疏表示的HyperLogLog存儲(chǔ)的字節(jié)超過(guò)了指定的閾值,它將轉(zhuǎn)變成稠密表示。
# 不建議使用大于16000的值。當(dāng)小于16000時(shí)能夠獲得較高存儲(chǔ)效率。
# 建議的值是3000,該值可以在較少PFADD(在執(zhí)行稀疏編碼時(shí)時(shí)間復(fù)雜度是O(N))操作執(zhí)行的同時(shí)獲得極高空間使用收益。當(dāng)CPU問(wèn)題無(wú)需考慮時(shí),可將該值提升到10000,但其值不應(yīng)超過(guò) 15000。
# 設(shè)置方式如下:
hll-sparse-max-bytes 3000
# 7 rehash處理
# 激活的rehash會(huì)占用每100毫秒的1 millisecond的CPU時(shí)間來(lái)對(duì)Redis hash table(存儲(chǔ)數(shù)據(jù)庫(kù)的鍵值對(duì)的hash table)執(zhí)行rehash。在Redis中hash table使用惰性rehash:在rehashing時(shí),hash table中執(zhí)行的操作越多,rehash執(zhí)行的步驟也越多。所以當(dāng)server很空閑時(shí),rehash將很簡(jiǎn)單,hash table也會(huì)有更多的內(nèi)存可以使用。
# 為了在條件許可的情況下對(duì)hash table進(jìn)行rehash,從而節(jié)省內(nèi)存空間,默認(rèn)情況下,rehash功能會(huì)每100毫秒中1 毫秒被調(diào)用一次。
# 如果不確定:
# 使用"activerehashing no" 如果當(dāng)前應(yīng)用環(huán)境很注重延遲、Redis僅允許2毫秒的延遲應(yīng)答。
# 使用"activerehashing yes" 如果當(dāng)前應(yīng)用環(huán)境不是太注重延遲且想要盡可能塊的釋放內(nèi)存空間。
# 默認(rèn)該功能開(kāi)啟:
activerehashing yes
# 8 客戶端輸出緩沖區(qū)
# 客戶端輸出緩沖區(qū)可以用來(lái)強(qiáng)制斷開(kāi)那些不能夠快速讀取服務(wù)器數(shù)據(jù)的客戶端連接。(如在Pub/Sub模式中,客戶端不能夠快速的處理publisher發(fā)送過(guò)來(lái)的消息)
# 客戶端類型可以細(xì)分為三類:
# normal -> 普通客戶端(包括MONITOR客戶端)
# slave -> 從節(jié)點(diǎn)客戶端
# pubsub ->訂閱至少一個(gè)pubsub通道或模式的客戶端
# client-output-buffer-limit 設(shè)置的通用格式如下:
# client-output-buffer-limit class> hard limit> soft limit> soft seconds>
# 一旦hard limit達(dá)到,客戶端將直接斷開(kāi)連接。如果soft limit 達(dá)到,客戶端連接將會(huì)持續(xù)soft seconds 后才斷開(kāi)連接。
# 例如,當(dāng)hard limit 是 32 MB(megabytes)、soft limit 在10 秒內(nèi)持續(xù)超過(guò)16MB,如果客戶端輸出緩沖區(qū)(clients output buffer)超過(guò)32 MB 或客戶客戶端輸出緩沖區(qū)(clients output buffer)超過(guò)16MB,并在接下來(lái)的10秒都高于16MB,客戶端連接將馬上斷開(kāi)。
# 默認(rèn)情況下,不需對(duì)normal級(jí)別的clients進(jìn)行約束因?yàn)檫@些客戶端如果沒(méi)有發(fā)起詢問(wèn)就不會(huì)接受數(shù)據(jù)。所以,只需對(duì)異步客戶端進(jìn)行約束因?yàn)楫惒娇蛻舳藭?huì)出現(xiàn)請(qǐng)求速度大于read速度的情況。
# 因?yàn)橛嗛喺吆蛷墓?jié)點(diǎn)使用推的方式接受數(shù)據(jù),所以需要對(duì)pubsub 客戶端和slave客戶端設(shè)置默認(rèn)的客戶端輸出緩沖區(qū)約束。
# 將hard limit 或 soft limit 置零表示關(guān)閉對(duì)應(yīng)的功能。
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
# 9 Redis心跳頻率
# Redis調(diào)用一個(gè)內(nèi)部函數(shù)來(lái)執(zhí)行后臺(tái)任務(wù),如在timeout時(shí)關(guān)閉客戶端連接,清除從未被請(qǐng)求的過(guò)期鍵,等等。
# 雖然并不是所有的tasks都使用同樣的頻率執(zhí)行,但是Redis會(huì)根據(jù)指定的頻率值來(lái)檢測(cè)tasks的執(zhí)行。
# 默認(rèn)設(shè)置的值為10,即每秒執(zhí)行10次。在Redis處于空閑提升該值時(shí),將會(huì)消耗更多的CPU。但是,提升該值也會(huì)使Redis更精確的處理超時(shí)問(wèn)題,并檢測(cè)到更多的過(guò)期鍵。
# 該值設(shè)置范圍是1到500。但是不建議將其設(shè)置大于100。大多數(shù)的用戶建議使用默認(rèn)的值(10),并根據(jù)應(yīng)用環(huán)境的低延遲需求適當(dāng)提升該值(峰值建議不要大于100)。
# 格式如下:
hz 10
# 10 AOF重寫(xiě)與磁盤(pán)同步
# 子進(jìn)程在執(zhí)行重寫(xiě)AOF文件時(shí),如果啟動(dòng)該功能,則數(shù)據(jù)每增長(zhǎng)32MB就進(jìn)行一次文件磁盤(pán)同步。該功能對(duì)加快文件同步到磁盤(pán)、避免大的延遲峰值有很大幫助。
# 默認(rèn)該功能啟動(dòng)。格式如下:
aof-rewrite-incremental-fsync yes

好記性不如爛筆頭,大家一定要收藏起來(lái)以備不時(shí)之需

您可能感興趣的文章:
  • 完美解決linux上啟動(dòng)redis后配置文件未生效的問(wèn)題
  • redis中修改配置文件中的端口號(hào) 密碼方法
  • redis3.2配置文件redis.conf詳細(xì)說(shuō)明
  • Redis配置文件redis.conf詳細(xì)配置說(shuō)明
  • Redis配置文件代碼講解

標(biāo)簽:拉薩 定州 泰州 甘南 河源 畢節(jié) 伊春 南寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis3.2.6配置文件詳細(xì)中文說(shuō)明》,本文關(guān)鍵詞  Redis3.2.6,配置文件,詳細(xì),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis3.2.6配置文件詳細(xì)中文說(shuō)明》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Redis3.2.6配置文件詳細(xì)中文說(shuō)明的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    玛曲县| 平潭县| 吉林省| 平阳县| 穆棱市| 崇礼县| 高雄市| 张家港市| 修水县| 安义县| 泰来县| 青河县| 微山县| 民县| 崇仁县| 嘉峪关市| 靖安县| 南通市| 南江县| 扬中市| 通城县| 玉溪市| 晋城| 汝阳县| 涿州市| 汉源县| 饶平县| 峨眉山市| 莱芜市| 砚山县| 荔浦县| 宝坻区| 汉中市| 高雄县| 嵩明县| 依安县| 巩义市| 柳林县| 承德县| 崇阳县| 阜新|