溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis3.2.6配置文件的示例分析

發(fā)布時間:2021-07-29 11:09:00 來源:億速云 閱讀:139 作者:小新 欄目:數(shù)據(jù)庫

小編給大家分享一下Redis3.2.6配置文件的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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

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

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

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

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

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

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

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

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

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

#############
# LUA腳本處理:
################################ LUA SCRIPTING ###############################
#
# 1 Lua腳本執(zhí)行超時閾值
# 設(shè)置Lua腳本執(zhí)超時的時間上限,單位是毫秒,milliseconds。
# 當(dāng)Lua腳本執(zhí)行超時,Redis會記錄腳本執(zhí)行之后的結(jié)果(超時后)并向查詢返回錯誤。
# 當(dāng)一個長時腳本執(zhí)行時間超過最大執(zhí)行時間時,只有SCRIPT KILL和 SHUTDOWN NOSAVE 命令可用。停止這類腳本運(yùn)行的第一個方法是調(diào)用一個非寫命令。第二種方法是shut down 這個server,如果已經(jīng)發(fā)送了一個寫命令但用戶并不想等待腳本自然終止。
# 如果想不限制腳本的執(zhí)行時間并且不需要返回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)實踐的考驗。
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 1 啟動Redis集群功能
# 正常情況下,啟動的Redis實例為非集群模式。只有當(dāng)節(jié)點配置成集群模式時才能成為集群節(jié)點。如需以集群模式啟動,取消下述配置的注釋即可:
# cluster-enabled yes
# 2 集群配置文件命令
# 每個集群節(jié)點都有一個集群配置文件。該文件不是用來讓用戶編輯,而是持久化集群信息。
# 該文件由集群節(jié)點創(chuàng)建并更新。每個Redis 集群節(jié)點都需要有唯一的集群配置文件。所以在同一系統(tǒng)創(chuàng)建的多個Redis實例需要確保不存在配置文件名相同的情況發(fā)生(這樣會導(dǎo)致集群配置文件重載)。
# 集群配置文件命令格式如下:
# cluster-config-file nodes-6379.conf
# 3 集群節(jié)點超時閾值
# 集群節(jié)點超時閾值用來作為節(jié)點不可達(dá)并被標(biāo)記為失效狀態(tài)的超時上限,單位是毫秒(millisecond)
# 大部分其他內(nèi)部時間將其基本參考數(shù)。
# 設(shè)置方式如下:
# cluster-node-timeout 15000
# 4 從節(jié)點可發(fā)起故障轉(zhuǎn)移的判定因子(slave-validity-factor)
# 當(dāng)主節(jié)點失效后,Redis避免讓存儲數(shù)據(jù)過舊的從節(jié)點發(fā)起故障轉(zhuǎn)移。
# 沒有簡單的方式可以直接準(zhǔn)確判定從節(jié)點的”data age”,可以通過下面兩個方面的檢測實現(xiàn):
# 1) 如果有多個從節(jié)點可以發(fā)起故障轉(zhuǎn)移,可以讓他們交換信息以選出數(shù)據(jù)狀態(tài)最節(jié)點主節(jié)點的從節(jié)點。從節(jié)點可以通過offset進(jìn)行排名并通過該排名延遲發(fā)起故障轉(zhuǎn)移的時機(jī)。
# 2) 每個獨立的從節(jié)點計算最近一次與主節(jié)點交互的時間。這里的交互可以是最近一次PING、最近一次接收到來自主節(jié)點的命令、與主節(jié)點斷開連接的時間(當(dāng)復(fù)制鏈接已經(jīng)down掉時)。如果最近一次與主節(jié)點的交互已經(jīng)足夠久遠(yuǎn),那么這個從節(jié)點將放棄進(jìn)行故障轉(zhuǎn)移。
# 在2)中的時間閾值可以由用戶設(shè)定。特別地,當(dāng)從節(jié)點的最近一次與主節(jié)點的交互遠(yuǎn)大于(node-timeout * slave-validity-factor) + repl-ping-slave-period 時,這個從節(jié)點將不會執(zhí)行故障轉(zhuǎn)移。
# 例如假設(shè)node-timeout為30秒,slave-validity-factor參數(shù)為10,repl-ping-slave-period 為10秒,當(dāng)從節(jié)點距離最近一次與主節(jié)點的交互時間大于310秒(30*10+10)時,該從節(jié)點不能進(jìn)行故障轉(zhuǎn)移。
# 一個過大的從節(jié)點有效因子(slave-validity-factor)會允許存儲過舊數(shù)據(jù)的從節(jié)點進(jìn)行故障轉(zhuǎn)移,而一個過小的從節(jié)點有效因子將會妨礙集群選擇從節(jié)點成為新的主節(jié)點。
# 所以合理的設(shè)置從節(jié)點有效因子很重要。
# 為了獲得最大的可用性,可以將從節(jié)點有效因子(slave-validity-factor)賦值為0。也就是說,從節(jié)點忽略距離最近一次與主節(jié)點交互的時間段,則是直接點嘗試發(fā)起故障轉(zhuǎn)移。(但是這種策略下,這些從節(jié)點仍會根據(jù)offset的排名來推遲發(fā)起故障轉(zhuǎn)移的時間)
# 從節(jié)點有效因子(slave-validity-factor)值為0是唯一可以保證網(wǎng)絡(luò)分區(qū)消失后,集群仍繼續(xù)工作的值。
# 設(shè)置格式如下:
# cluster-slave-validity-factor 10
# 5 從節(jié)點遷移屏蔽因子(cluster-migration-barrier)
# Redis集群支持將從節(jié)點遷移到孤立主節(jié)點(orphaned masters),沒有可以工作從節(jié)點的主節(jié)點)。該功能減少了集群孤立主節(jié)點故障但沒有可工作從節(jié)點進(jìn)行故障轉(zhuǎn)移的情況的發(fā)生。
# 從節(jié)點可以遷移到孤立主節(jié)點當(dāng)且僅當(dāng)原來的主節(jié)點的剩余可工作從節(jié)點個數(shù)大于等于指定的可工作從節(jié)點數(shù)。這個數(shù)稱為從節(jié)點遷移屏蔽因子(migration barrier)。當(dāng)遷移屏蔽因子設(shè)置為1時,當(dāng)且僅當(dāng)主節(jié)點擁有至少兩個可工作的從節(jié)點才允許其中從節(jié)點遷移到孤立主節(jié)點(orphaned masters)。該因子通常用來表明使用者需要為集群中的主節(jié)點配置從節(jié)點個數(shù)。
# 默認(rèn)遷移屏蔽因子是1(從節(jié)點可以執(zhí)行遷移當(dāng)前僅當(dāng)其主節(jié)點在該節(jié)點遷移后仍保有至少一個從節(jié)點)。如果想關(guān)閉該功能,只需將該參數(shù)設(shè)置成一個極大值即可。
# 允許將遷移屏蔽因子置零。這種行為僅在調(diào)試時有用,且在生產(chǎn)環(huán)境中存在極大風(fēng)險。
# 配置格式如下:
# cluster-migration-barrier 1
# 6 是否支持集群部分可用
# 默認(rèn)情況下,Redis集群將停止接收客戶端請求(停止服務(wù))當(dāng)集群檢測到存在哈希槽沒有對應(yīng)負(fù)責(zé)的節(jié)點。也就是說,如果集群部分down(如有一部分哈希槽沒有對應(yīng)的節(jié)點),整個集群最終將會不可用。(集群信息傳播遵循最終一致性)
# 當(dāng)所有的槽都再次有對應(yīng)負(fù)責(zé)的節(jié)點后,集群將會自動再次可用。
# 但是有時希望即使集群只有部分槽有對應(yīng)的節(jié)點,集群也能繼續(xù)接受客戶端請求并處理對應(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í)行超時上限
# Redis慢日志系統(tǒng)用來記錄執(zhí)行時間較長的查詢。這里的執(zhí)行時間(“execution time”)不包括IO操作時間,如接收客戶端的請求,返回請求結(jié)果等,而是實際執(zhí)行命令的時間(此時線程處于阻塞狀態(tài),僅能執(zhí)行該命令,不能同時處理其他請求)
# 可以使用兩個參數(shù)配置慢日志:一個參數(shù)告知Redis執(zhí)行時間超時閾值(單位是微秒,microseconds),這樣一旦某個執(zhí)行時間超過指定上限,將會被記錄到慢日志中;另一個參數(shù)是慢日志的長度。慢日志使用環(huán)式結(jié)構(gòu)存儲超時命令。(當(dāng)慢日志滿后,新命令添加進(jìn)去后,最老的命令將被踢出)
# 單位是微秒(microsecond,106微秒等于1秒)。當(dāng)該值為負(fù)數(shù)時表示禁用slow log功能。當(dāng)該值為零時,表示強(qiáng)制使用slow log記錄每一條命令。
# 默認(rèn)慢日志功能是開啟的,slowlog-log-slower-than時間上限是104微秒。
slowlog-log-slower-than 10000
# 2 慢日志長度
# slow log保存在內(nèi)存中,只要內(nèi)存容量足夠,可以隨意設(shè)定慢日志長度??梢允褂肧LOWLOG RESET命令重新設(shè)置慢日志長度。
# 默認(rèn)設(shè)置如下:
slowlog-max-len 128

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

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

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

以上是“Redis3.2.6配置文件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI