小編給大家分享一下redis3.2.6配置文件的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站制作、網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務德清,十多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:13518219792
Redis3.2.6最新配置文件詳細中文說明,啥都不說直接看說明
############## # 指定配置文件: ################################## INCLUDES ##################################### # # 1 包含文件 # 如果想要使用到配置文件,Redis服務必須以配置文件的路徑作為第一個參數(shù)啟動。如:./redis-server /path/to/redis.conf # 單位說明:當需要指定內(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一個或多個配置文件。 # 當需要在一個標準的通用配置模板上進行一些個性化定制,則可以使用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命令放置在配置文件的最前面以防止配置被覆蓋。 # 但是如果打算使用另外的配置文件來覆蓋當前文件的部分或全部配置,那么則可將include命令放置到該文件的末尾。 # Redis這里使用了最后生效原則,即最后被解析的配置將作為最后的配置。 # 格式如下: # include /path/to/local.conf # include /path/to/other.conf ############## # 網(wǎng)絡配置: # 對服務器網(wǎng)絡相關(guān)的參數(shù)進行一個配置。 ################################## NETWORK ##################################### # # 1 bind命令 # 我們知道,一臺服務器上可能有多個網(wǎng)絡接口,所以如果沒有使用bind指定接口,Redis將監(jiān)聽該機器上的所有網(wǎng)絡接口的連接請求。 # 如果僅需要監(jiān)聽一個或多個指定的接口,則可以使用“bind”命令來指定接口。 # 實例如下: # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 # ~~~ WARNING ~~~ 如果運行Redis服務的機器直接暴漏在Internet中,那么綁定所有的接口是一件危險的事。因為這樣會將Redis服務暴漏給Internet中的每一個人。所以默認情況下,使用bind 127.0.0.1命令強制Redis監(jiān)聽IPv4環(huán)回接口地址,也就是說Redis僅接受本機的客戶端請求。 # 服務器可以有一個網(wǎng)絡接口(通常表述為網(wǎng)卡),或者多個。假設(shè)某機器上有兩個網(wǎng)卡,分別為192.168.205.5 和192.168.205.6,如果bind 192.168.205.5,那么只有該網(wǎng)卡地址接受外部請求,如果不綁定,則兩個網(wǎng)卡口都接受請求。 # 如果需要進行外網(wǎng)訪問則需注銷該命令行。在配置文件中,“#”代表注釋。 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bind 127.0.0.1 # 2 保護模式 # 保護模式是Redis提供的安全防護層。設(shè)立該層是為了避免網(wǎng)絡對未關(guān)閉Redis實例的隨意訪問。 # 該模式需要開啟,當: # 1) 沒有使用“bind”命令明確需要綁定的地址; # 2) 沒有為Redis配置密碼。 # 該模式啟動后,服務器僅能接受使用IPv4、IPv6環(huán)回地址(127.0.0.1或::1)和本地Socket的客戶端的連接請求。 # 默認情況下,保護模式是開啟的。建議只有在已明確待連接的客戶端無需授權(quán)或無需使用bind指定特定的接口時才關(guān)閉該模式。 # 使用如下: protected-mode yes # 3 端口 # 在指定的端口上進行監(jiān)聽,默認是 6379。當端口設(shè)置為0時,Redis就不會在TCP socket上進行監(jiān)聽。 # 使用如下: port 6379 # 4 TCP listen() backlog設(shè)置 # 在一個并發(fā)量高的環(huán)境中,需要指定一個比較大的backlog值來避免慢連接情況的發(fā)生。注意,linux內(nèi)核會默認使用/proc/sys/net/core/somaxconn值來減小backlog實際值。因此為了獲得期望的值,需要確保增大 somaxconn 和 tcp_max_syn_backlog 這兩個值。 # 建議配置: tcp-backlog 511 # 5 Unix socket # 指定Unix socket路徑來進行連接監(jiān)聽。默認是不指定,因此redis不會在Unix socket上進行監(jiān)聽。 # 使用方法如下: # unixsocket /tmp/redis.sock # unixsocketperm 700 # 6 Client timeout # 當client在空閑N秒后,關(guān)閉該連接(0表示不處理空閑連接,默認方式) # 實例: timeout 0 # 7 TCP keepalive時間 # 當該值非零時,如果通信缺失,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版本之后默認指定該值為300 seconds。 # 實例如下: tcp-keepalive 300 ############## # 通用配置: # 對一些通用參數(shù)進行配置。 ################################# GENERAL ##################################### # # 1 daemon # 默認情況下,Redis并不是一個守護進程,如果需要將Redis設(shè)置成守護進程,則可以使用daemonize yes進行配置。注意:當Redis作為守護進程時, 其pid 文件為 /var/run/redis.pid。 # 使用如下: daemonize no # 2 supervision # Redis 3.2新增命令。如果需要在機器啟動(upstart模式 或systemd模式)時就啟動Redis服務器,可以通過該選項來配置Redis。 # 支持的模式: # supervised no – 無,不會與supervised tree進行交互 # supervised upstart – 將Redis服務器添加到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回復。 # 默認是不開啟: supervised no # 3 pid文件 # 如果指定了pid文件,Redis會在啟動時寫該pid文件,在退出時刪除該文件。 # 當Redis服務器已守護進程啟動時,如果指定了配置文件,則直接使用,如果沒有指定,則創(chuàng)建/var/run/redis.pid作為配置文件。 # 使用如下: pidfile /var/run/redis_6379.pid # 4 日志級別 # 指定服務器的verbosity級別。Redis提供四種級別: # debug —- 包含大量信息,用于開發(fā)和測試 # verbose —- 包含一些稀有的有用信息,但沒有debug級別混亂 # notice —- 適量提示信息,用于生產(chǎn)環(huán)境 # warning —- 只包含非常重要和關(guān)鍵的信息 # 默認是notice級別: loglevel notice # 5 日志文件名稱 # 指定日志文件名稱。指定為空時將輸出到標準輸出設(shè)備中。如果Redis以守護進程啟動,當日志文件名稱為空時,日志將會輸出到 /dev/null。 # 默認設(shè)置如下: logfile "" # 6 寫系統(tǒng)日志 # 6.1允許寫系統(tǒng)日志 # 將syslog-enabled設(shè)置為yes時, 允許將Redis服務日志記錄到系統(tǒng)日志中。此外,還 # 可以使用更多的日志參數(shù)來滿足特定要求。 # 實例如下: # syslog-enabled no # 6.2指定在系統(tǒng)日志身份 # 一旦enable寫入系統(tǒng)日志,可以指定服務在系統(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ù)量。默認使用0號數(shù)據(jù)庫??梢栽诿恳粋€連接上使用SELECT來指定另外的數(shù)據(jù)庫,但是這個值必須在 0到 ‘database'-1之間。 # 實例如下: databases 16 ################ # 快照配置: # Redis提供快照功能,記錄某一時刻數(shù)據(jù)庫中保存的數(shù)據(jù)。 ################################ SNAPSHOTTING ################################ # # 1 DB持久化 # 將DB數(shù)據(jù)保存到磁盤。格式為:save 。當在規(guī)定的時間內(nèi)seconds,如果寫磁盤的次數(shù)超過了changes,則將DB數(shù)據(jù)保存到磁盤。如save 900 1表示在900秒內(nèi),如果對DB進行了至少一次寫操作,則將DB數(shù)據(jù)持久化到磁盤上。 # 注意,可以通過注銷所有save命令或?qū)⒃谒衧ave命令后追加save置空(save “”)命令來禁用save功能。使用示例: save 900 1 save 300 10 save 60 10000 # 2 bgsave-error # 默認情況下,在發(fā)生RDB快照或BGSAVE執(zhí)行失敗的那一刻,Redishi執(zhí)行接收寫請求。這會使用戶察覺(通常比較困難)到數(shù)據(jù)沒有正確的持久化到磁盤。否則有可能出現(xiàn)不被察覺的災難性后果。 # 當后臺BGSAVE程序可以再次開始工作時,Reidis會再次自動允許寫入。 # 如果已經(jīng)對Server和服務器持久化建立了正確的監(jiān)控,那么當你禁用該功能后,即使磁盤、持久化等出現(xiàn)問題,Redis也能繼續(xù)提供服務。 # 實例如下: stop-writes-on-bgsave-error yes # 3 rdbcompression # 默認情況下,在dump RDB文件時,Redis采用LZF(一種高效的壓縮算法)算法進行字符串對象數(shù)據(jù)的壓縮,其性能較高。雖然LZF算法會消耗部分CPU性能,但是其數(shù)據(jù)壓縮能夠較高,所以建議不要關(guān)閉: rdbcompression yes # 4 RDB文件名稱 # 該命令用于定義dump DB文件的文件名。格式如下: dbfilename dump.rdb # 5 工作目錄 # 指定RDB文件所在目錄。該目錄也是AOF文件所在目錄。注意,這里是指定一個目錄而不是文件名。默認是當前目錄,格式如下: dir ./ ################## # 復制配置: # Redis提供主從復制功能保證數(shù)據(jù)的可靠性。 ################################# REPLICATION ################################### # # 1 主從關(guān)系建立 # Redis主從復制。單機模式下,Redis支持使用slaveof命令從另一個Redis服務器的拷貝中來創(chuàng)建一個實例。集群模式下則使用cluster replicate 命令。Redis復制使用前須知: # 1)Redis復制是異步復制,但是可以配置連接的從節(jié)點數(shù)量。 # 2)當連接斷開,Redis從節(jié)點支持部分重同步(psync)功能來保證主從節(jié)點數(shù)據(jù)同步。 # 3)復制過程是一個自動化過程,無需人工干預。當出現(xiàn)網(wǎng)絡分區(qū)后,從節(jié)點會自動嘗試建立與主節(jié)點的連接,并嘗試同步。 # 建立主從連接的命令如下: # slaveof # 2 授權(quán)密碼 # 當主節(jié)點開啟密碼保護時(通過配置"requirepass" 命令),從節(jié)點必須在開始復制同步前進行授權(quán)操作,否則其請求不會被接受。 # 命令如下: # masterauth # 注意,該命令只有在主節(jié)點開啟密碼保護時才生效。 # 3 從節(jié)點是否支持臟讀 # 當主從斷開連接或主從進行復制時,從節(jié)點對外擁有兩種策略: # 1)如果“slave-serve-stale-data”參數(shù)設(shè)置成“yes”(默認情況下),則從節(jié)點可以響應客戶端請求,盡管可能會恢復過期數(shù)據(jù)或空數(shù)據(jù)(如果主從第一次進行同步)。 # 2)如果“slave-serve-stale-data”參數(shù)設(shè)置成“no”,則從節(jié)點會對除INFO 和SLAVEOF之外的命令返回"SYNC with master in progress"信息。 # 默認設(shè)置如下: slave-serve-stale-data yes # 4 從節(jié)點是否支持寫入 # 指定從節(jié)點是否支持寫操作。當需要存儲一些臨時數(shù)據(jù)時,讓從節(jié)點支持寫操作很有用。這樣一來,就可以通過主從同步輕松的將已寫入從節(jié)點的數(shù)據(jù)刪除。但是,如果配置出錯,也會出現(xiàn)客戶端寫入出錯等問題。 # 注意,從Redis 2.6之后,從節(jié)點默認是只讀的。 # 提示,只讀的從服務器并不是設(shè)計給非信任的互聯(lián)網(wǎng)客戶端提供服務。這種模式的服務器設(shè)置只是一個用來防止對服務器實例進行誤操作的保護層。默認情況下,只讀從服務器能夠輸出管理員命令,如CONFIG、 DEBUG等。如果想限制只讀從節(jié)點輸出的管理型命令,可以通過'rename-command' 命令來隱藏這些管理員命令或危險命令。 # 提高它的安全性,使得她作為一個影子來執(zhí)行管理或者危險的命令。默認設(shè)置如下: slave-read-only yes # 5 復制策略:有無磁盤 # 主從節(jié)點的數(shù)據(jù)同步策略有兩種:磁盤同步、套接字同步。 # ——————————————————- # WARNING: 無磁盤復制(DISKLESS REPLICATION I)當前仍處于實驗階段 # ——————————————————- # # 對于新連接的slaves或斷開重連的slaves將無法執(zhí)行“部分同步”,需要進行一次完全同# 步。當進行完全同步時,主節(jié)點將傳播一個RDB文件給從節(jié)點。該RDB文件的傳播方式# 有兩種: # 1)基于磁盤:Redis主節(jié)點創(chuàng)建一個新進程將RDB文件寫到磁盤,然后將生成的RDB文件傳播給從節(jié)點。 # 2)無磁盤:Redis主節(jié)點創(chuàng)建一個新進程直接將RDB文件寫到slaves的套接字中,RDB文件無需落盤。 # 基于磁盤的復制,一旦RDB文件生成,多個slaves將排隊等待并可以共享該文件。而無磁盤復制一旦開始傳輸數(shù)據(jù),新slaves到來后將會排隊等待。 # 在使用無磁盤復制時,主節(jié)點在開始傳輸同步數(shù)據(jù)前將根據(jù)配置的時間進行等待,從而實現(xiàn)多個從節(jié)點的并發(fā)傳輸。 # 在磁盤速度緩慢且網(wǎng)絡速度很快(高帶寬)時,無磁盤復制效率更高。默認情況下,無磁盤復制同步關(guān)閉。配置如下: repl-diskless-sync no # 6 無磁盤復制等待時間 # 無磁盤復制前,主節(jié)點需要等待的時間。該配置在啟用無磁盤復制時將生效。 # 由于一旦開啟一次數(shù)據(jù)傳輸,其余slaves將排隊等待,所以最好讓主節(jié)點等待一段時間,這樣主節(jié)點就可對多個slaves并發(fā)傳播數(shù)據(jù)。 # 等待的單位是秒(second),默認是5秒。一旦將其設(shè)置為0,主節(jié)點將會馬上開始數(shù)據(jù)傳輸。默認配置如下: repl-diskless-sync-delay 5 # 7 slaves定時向master發(fā)送PING的時間片 # 默認情況下,slaves每10秒向master發(fā)送一次PING消息??梢愿鶕?jù)網(wǎng)絡等因素進行設(shè)置。該配置默認在配置文件中關(guān)閉: # repl-ping-slave-period 10 # 8 復制超時閾值 # 以下情境將使用到復制超時閾值: # 1) 從節(jié)點在執(zhí)行SYNC期間,檢測塊文件傳輸超時 # 2) 從節(jié)點檢測主節(jié)點離線(data、pings) # 3) 主節(jié)點檢測從節(jié)點離線(REPLCONF ACK) # 必須要確保復制超時閾值(repl-timeout)大于slaves定時向master發(fā)送PING的時間片(repl-ping-slave-period),否則將總會檢測到復制超時(當slave發(fā)送PING的時間片大于復制超時閾值時,slave還未發(fā)送ping就會被定性為復制超時)。使用格式如下: # repl-timeout 60 # 9 TCP_NODELAY功能 # 執(zhí)行完SYNC后,是否要禁用TCP_NODELAY。 # 當禁用該功能后,Redis會使用占用更少帶寬的小TCP包向從節(jié)點發(fā)送數(shù)據(jù)。但是這樣做將會增大從節(jié)點端數(shù)據(jù)傳輸延時。在Linux下禁用TCP_NODELAY功能將導致40 微秒的延遲。 # 當啟動該功能后,在進行復制時將會減少數(shù)據(jù)傳輸延遲,但是會占用更大的帶寬。 # 默認情況下,我們優(yōu)先選擇低延遲,但是在高速網(wǎng)絡或主從節(jié)點存在多hops路徑時,建議禁用TCP_NODELAY功能。 # 默認開啟TCP_NODELAY功能。格式如下: repl-disable-tcp-nodelay no # 10 復制積壓緩沖區(qū)大小 # 設(shè)置復制積壓緩沖區(qū)(replication backlog)大小。當slaves斷開與節(jié)點連接后,Redis使用復制積壓緩沖區(qū)記錄需要未發(fā)送給slave的數(shù)據(jù)。當從節(jié)點重連后,僅需執(zhí)行一次部分同步,將從節(jié)點缺失數(shù)據(jù)補全。 # 復制積壓緩沖區(qū)(replication backlog)越大,Redis可以支持的slave離線時間就越長。復制積壓緩沖區(qū)用于部分重同步。 # 復制緩沖區(qū)只有在有slave連接時才分配內(nèi)存。沒有slave時,該內(nèi)存會被釋放出來,默認大小為1m。格式如下: # repl-backlog-size 1mb # 11 復制積壓緩沖區(qū)釋放時間片 # 當主節(jié)點不再有新連接的從節(jié)點后,復制積壓緩沖區(qū)將會被釋放。為避免因從節(jié)點頻繁掉線后上線而頻繁的進行復制積壓緩沖區(qū)的釋放與申請,Redis提供復制積壓緩沖區(qū)釋放時間片(repl-backlog-ttl)參數(shù),保證主節(jié)點在檢測到從節(jié)點掉線后的規(guī)定時間內(nèi)不會釋放該緩沖區(qū)。 # 值為零時表示不會釋放該復制積壓緩沖區(qū)。 # 單位為秒,配置如下: # repl-backlog-ttl 3600 # 12 從節(jié)點優(yōu)先級 # 使用整數(shù)表示從節(jié)點優(yōu)先級。 # 當主節(jié)點無法正常工作后,Sentinel將使用該優(yōu)先級在從節(jié)點中推選出新的主節(jié)點。 # 優(yōu)先級對應的整數(shù)值越小,被推選成主節(jié)點的可能性更大。但是當優(yōu)先級的值為零時表示該從節(jié)點不具備成為主節(jié)點的身份。 # 默認優(yōu)先級為100。配置形式如下: slave-priority 100 # 13 從節(jié)點連接數(shù)及從節(jié)點延時設(shè)置 # 當主節(jié)點的已連接從節(jié)點數(shù)小于N且這些從節(jié)點延遲均大于M秒,該主節(jié)點將停止接收寫請求。 # 從節(jié)點處于“online”狀態(tài),當且僅當延遲(通過計算距離上一次接收從節(jié)點的ping消息的時間間隔獲得)小于指定的閾值。 # 這個選項配置不是用來保證N個部分接收寫信息,而是為了在沒有足夠的從節(jié)點可用時,限制寫丟失。 # 如需要至少需要3個從節(jié)點并在10s內(nèi)可用,則設(shè)置: # min-slaves-to-write 3 # min-slaves-max-lag 10 # 一旦對這兩個中的一個賦值為零,則該功能失效。 # 默認min-slaves-to-write 參數(shù)設(shè)置為0,即該功能默認不啟用。 # 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:自動檢測獲取。當從節(jié)點連接主節(jié)點時,通過檢查對應套接字地址獲取。 # Port:從節(jié)點在復制中和主節(jié)點握手時需要使用到port。通常情況下,port即為連接時的port。 # 但是,當發(fā)生端口轉(zhuǎn)發(fā)(port forwarding,轉(zhuǎn)發(fā)一個網(wǎng)絡端口從一個網(wǎng)絡節(jié)點到另一個網(wǎng)絡節(jié)點的行為)或使用NAT(Network Address Translation,網(wǎng)絡地址轉(zhuǎn)換)技術(shù)是,從節(jié)點需要被分配不同IP和port后才能被訪問。 # 接下來的兩個配置用來設(shè)置從節(jié)點的IP和port,用來告知主節(jié)點所指定的IP和port,這樣INFO和ROLE 才能繼續(xù)返回結(jié)果。 # 當需要重寫IP和port時,則無需配置該選項。 # 配置格式如下: # slave-announce-ip 5.5.5.5 # slave-announce-port 1234 ############## # 安全配置: # Redis提供一些安全策略,盡量保證訪問安全性。 ################################## SECURITY ################################### # # 1 認證密碼 # Server在處理客戶端命令前,該客戶端需要提供提供認證密碼。這在非可信網(wǎng)絡環(huán)境中很有用。 # 為減少后臺執(zhí)行復雜度,這個選項一般都會被注釋掉。因為大多數(shù)用戶不需要授權(quán)。(如用戶使用自己的服務器) # Warning: 由于Redis執(zhí)行高效,所以外部用戶每秒可以嘗試認證15w次。也就是說,為避免密碼被快送攻破,用戶需要使用一個極其復雜的密碼。 # 設(shè)置認證密碼格式如下: # requirepass foobared # 2 命令重命名 # 重命名命令。 # 在一個共享環(huán)境中有必要對危險命令進行重命令,從而避免危險命令的濫用、無用。 # 如給CONFIG命令重新設(shè)置一個難以猜測的命令,這樣這個命令就很難被普通用戶使用的,但仍能被內(nèi)部工具使用。 # 如: # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # 當然,有時需要禁用一些命令。可以通過將命令置空實現(xiàn): # rename-command CONFIG "" # 注意,一定要避免重命名那些寫AOF文件或傳輸數(shù)據(jù)給slaves的命令,否則將會導致各種難以預料的錯誤。 ########### # 限制配置: # 對一些參數(shù)范圍進行限定。 ################################### LIMITS #################################### # # 1 最大客戶端連接數(shù) #設(shè)置某一時刻客戶端的并發(fā)連接數(shù)。默認情況下,限制上限是1w。但是,如果Redis服務器沒有配置進程文件limit,那么可允許連接的最大客戶端個數(shù)將被設(shè)置為當前文件限制的最小值32(Redis會保留一部分文件給內(nèi)部用戶)。 # 一旦得到了連接上限,Redis將關(guān)閉所有新連接并發(fā)送錯誤“max number of clients reached”提示。連接上限配置格式如下: # maxclients 10000 # 2 最大可用內(nèi)存 # 不要再內(nèi)存超過指定限制時仍然使用內(nèi)存。 # 當達到內(nèi)存上限時,Redis會根據(jù)選定的過期鍵策略移除一些key。 # 如果根據(jù)過期鍵策略仍不能移除一些鍵或者過期鍵策略設(shè)置成“noeviction”(不啟用過期鍵策略),那么Redis會向如SET、LPUSH等使用內(nèi)存的命令返回錯誤,向諸如GET等讀命令正常返回結(jié)果。 # 這個配置通常在將Redis當過LRU 緩存或?qū)σ栽O(shè)置硬性的內(nèi)存上限的Redis很適用。 # WARNING: slaves的輸出緩沖區(qū)不在主節(jié)點的maxmemory計算中,所以設(shè)置的maxmemory不宜過大。如果過大,可能導致主機的剩余內(nèi)存過小,從而不能預留足夠的內(nèi)存用于創(chuàng)建slaves的輸出緩沖區(qū)。 # 簡言之,如果當前節(jié)點存在已連接的從節(jié)點,建立設(shè)置一個較小的maxmemory上限,這樣系統(tǒng)就可以有多余的RAM用與創(chuàng)建從節(jié)點輸出緩存。(當過期鍵策略設(shè)置成'noeviction'時,則沒有必要這么做) # 設(shè)置格式如下: # maxmemory # 3 內(nèi)存淘汰策略 # MAXMEMORY POLICY: 當達到maxmemory時,可以采用的內(nèi)存淘汰策略。 # Redis提供五種內(nèi)存淘汰策略: # volatile-lru:利用LRU算法移除過期keys。 # allkeys-lru:利用LRU算法移除keys。 # volatile-random:隨機移除過期keys。 # allkeys-random:隨機移除keys。 # volatile-ttl:按照最近過期時間來刪除(輔以TTL),移除即將過期的keys。 # noeviction:不移除任何key,只是返回一個寫錯誤。 # Note: 不管采用了上述何種淘汰策略,當沒有合適的鍵進行移除時,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 # 默認內(nèi)存淘汰策略是'noeviction'。 # 4 最大樣例檢測數(shù) # LRU算法和最小TTL算法都不是精確算法,所以可以對其進行執(zhí)行速度或精確度上的判定。 # 默認情況下,Redis會從五個鍵中選擇一個最近最久未使用的鍵進行淘汰??梢酝ㄟ^配置該選擇設(shè)置檢測基數(shù)。 # 一般情況下,五個檢測樣本可以獲得足夠好的結(jié)果。10個樣本的結(jié)果更接近LRU算法,但是會消耗更多的CPU。3個樣本可以獲得較高的執(zhí)行速度但是不夠精確。 # 配置格式如下: # maxmemory-samples 5 ############## # AOF配置: # AOF持久化模式對應的一些配置。 ############################## APPEND ONLY MODE ############################### # # 1 是否開啟AOF持久化功能 # 默認情況下,Redis會異步將數(shù)據(jù)集快照到磁盤上。盡管這種模式對許多應用友好,但是當Redis進程崩潰或發(fā)生掉電時,幾分鐘內(nèi)的寫信息將丟失(根據(jù)快照執(zhí)行的粒度)。 # AOF作為一種可替換的持久化策略,能夠提供更好的耐久性。如使用默認的fsync策略,Redis僅會丟失1s的寫信息,當發(fā)生突發(fā)事件(服務器掉電、服務器進程崩潰但OS運行正常) # AOF持久化和RDB持久化可以同時開啟。如果在啟動Redis時已經(jīng)存在AOF文件,則會直接加載AOF文件(考慮到AOF文件相比RDB文件有更好的耐久性)。 # 關(guān)于AOF的更多訊息見: http://redis.io/topics/persistence # 默認AOF關(guān)閉,配置如下: appendonly no # 2 指定AOF文件名稱 # 指定AOF文件名稱,默認是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下默認是每30s執(zhí)行一次flush。 # always:每寫入一次AOF就調(diào)用一次fsync。慢,最安全。 # everysec:每秒調(diào)用一次fsync。適中。 # 默認fsync的調(diào)用頻率是“everysec”,這種策略在執(zhí)行速度和數(shù)據(jù)安全進行折中。 # 當可以容忍一定程度數(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 # 當AOF執(zhí)行fsync的策略是always和everysec時,如果此時有一個后臺進程(BGSAVE進程或AOF rewrite進程)正在執(zhí)行大量的I/O操作到磁盤,在一些Linux系統(tǒng)中,執(zhí)行fsync會造成較長的阻塞。當前對這種情況還沒有很好的解決策略,即使在不同的線程中執(zhí)行fsync也會導致調(diào)用同步write(2)阻塞。 # 為了緩解上述問題,可以通過配置下述選項來避免在主線程調(diào)用fsync()時執(zhí)行BGSAVE或 BGREWRITEAOF帶來的阻塞。 # 也就是說,默認情況下,當子進程執(zhí)行BGSAVE或BGREWRITEAOF時,Redis的耐久性將默認轉(zhuǎn)變成"appendfsync none"。在實際的應用中就意味著在最壞的場景下將丟失30s的數(shù)據(jù),即使配置了fsync調(diào)用頻率為always或everysec。(默認情況下,Linux每30s自動調(diào)用一次fsync將緩存數(shù)據(jù)flush到磁盤) # 如果當前應用已考慮延遲問題,則將該配置設(shè)置成“yes”。否則使用默認配置(“no”),這是從耐久性角度考慮的最安全的選擇。 no-appendfsync-on-rewrite no # 上述配置等價于appendfsync-on-rewrite(在rewrite時仍執(zhí)行fsync) # 4 AOF rewrite觸發(fā)時機 # 設(shè)置AOF 重寫的觸發(fā)條件。 # 當AOF日志按照指定的比例增長時,可以通過調(diào)用BGREWRITEAOF執(zhí)行自動的AOF rewrite。 # 工作原理:Redis通過對比上一次執(zhí)行rewrite時AOF文件的大小與當前AOF文件大?。ㄔ谥貑r將沒有上一次執(zhí)行rewrite的記錄,這時將使用startup時的AOF文件大小),決定是否進行rewrite。 # 如果當前AOF對于上一次執(zhí)行rewrite的AOF文件的增長比率大于指定的比率,將會觸發(fā)一次rewrite。 # 當然,還需指定一個AOF進行重寫的最小單位。這樣做可以避免增長比率已經(jīng)達到要求,但對應的AOF仍很小的情況(這種情況下沒有必要進行rewrite)的發(fā)生。 # 如果想要關(guān)閉自動AOF rewrite功能,可將進行rewrite要求的增長比率設(shè)置0。 # 默認當AOF大于64MB且相比于上一次rewrite,AOF以擴充了兩倍時會觸發(fā)一次rewrite執(zhí)行。默認配置如下: auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 5 AOF 文件不完整 # 在將AOF文件加載到內(nèi)存時(重啟Redis),可能會出現(xiàn)AOF被截斷的情況。 # 如當Redis運行所在系統(tǒng)突然崩潰(當ext4文件系統(tǒng)在安裝時沒有配置成數(shù)據(jù)按序存儲),會出現(xiàn)AOF被截斷情況。 # 如果Redis程序發(fā)生崩潰或異常,但操作系統(tǒng)仍能正常工作,則不會出現(xiàn)AOF被截斷的情況。 # 出現(xiàn)AOF被截斷后,Redis要么直接退出并返回錯誤,要么加載被截斷AOF中盡可能多的數(shù)據(jù)(當前默認方式)。 # 可以通過aof-load-truncated選項進行配置 # 當aof-load-truncated設(shè)置成“yes”,Redis仍會加載一個被截斷的AOF文件,同時向用戶報告AOF文件被截斷。如果設(shè)置成“no”,Redis會直接返回錯誤并拒絕啟動,這時用戶需要使用"redis-check-aof"程序修復AOF,只有這樣才能重啟Server。 # 注意,如果AOF文件在執(zhí)行一半時就出現(xiàn)問題,即使設(shè)置aof-load-truncated為 “yes”,Redis也會直接退出并返回錯誤。 # 這個配置僅在Redis嘗試從AOF文件讀更多數(shù)據(jù)但發(fā)現(xiàn)沒有足夠字計數(shù)存在時有意義。 # 默認開啟該功能。 aof-load-truncated yes ############# # LUA腳本處理: ################################ LUA SCRIPTING ############################### # # 1 Lua腳本執(zhí)行超時閾值 # 設(shè)置Lua腳本執(zhí)超時的時間上限,單位是毫秒,milliseconds。 # 當Lua腳本執(zhí)行超時,Redis會記錄腳本執(zhí)行之后的結(jié)果(超時后)并向查詢返回錯誤。 # 當一個長時腳本執(zhí)行時間超過最大執(zhí)行時間時,只有SCRIPT KILL和 SHUTDOWN NOSAVE 命令可用。停止這類腳本運行的第一個方法是調(diào)用一個非寫命令。第二種方法是shut down 這個server,如果已經(jīng)發(fā)送了一個寫命令但用戶并不想等待腳本自然終止。 # 如果想不限制腳本的執(zhí)行時間并且不需要返回warning,可以將該參數(shù)設(shè)置成0或負數(shù)。 # 默認配置如下: lua-time-limit 5000 ############### #Redis 集群配置: ################################ REDIS CLUSTER ############################### # # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # WARNING EXPERIMENTAL: 盡管當前Redis Cluster代碼已經(jīng)穩(wěn)定,但是為了將這部分代碼水準標記為“mature”, # 仍需要一批有分量的用戶將該功能應用到生產(chǎn)環(huán)境。即Redis Cluster功能仍需要生產(chǎn)實踐的考驗。 # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # 1 啟動Redis集群功能 # 正常情況下,啟動的Redis實例為非集群模式。只有當節(jié)點配置成集群模式時才能成為集群節(jié)點。如需以集群模式啟動,取消下述配置的注釋即可: # cluster-enabled yes # 2 集群配置文件命令 # 每個集群節(jié)點都有一個集群配置文件。該文件不是用來讓用戶編輯,而是持久化集群信息。 # 該文件由集群節(jié)點創(chuàng)建并更新。每個Redis 集群節(jié)點都需要有唯一的集群配置文件。所以在同一系統(tǒng)創(chuàng)建的多個Redis實例需要確保不存在配置文件名相同的情況發(fā)生(這樣會導致集群配置文件重載)。 # 集群配置文件命令格式如下: # cluster-config-file nodes-6379.conf # 3 集群節(jié)點超時閾值 # 集群節(jié)點超時閾值用來作為節(jié)點不可達并被標記為失效狀態(tài)的超時上限,單位是毫秒(millisecond) # 大部分其他內(nèi)部時間將其基本參考數(shù)。 # 設(shè)置方式如下: # cluster-node-timeout 15000 # 4 從節(jié)點可發(fā)起故障轉(zhuǎn)移的判定因子(slave-validity-factor) # 當主節(jié)點失效后,Redis避免讓存儲數(shù)據(jù)過舊的從節(jié)點發(fā)起故障轉(zhuǎn)移。 # 沒有簡單的方式可以直接準確判定從節(jié)點的”data age”,可以通過下面兩個方面的檢測實現(xiàn): # 1) 如果有多個從節(jié)點可以發(fā)起故障轉(zhuǎn)移,可以讓他們交換信息以選出數(shù)據(jù)狀態(tài)最節(jié)點主節(jié)點的從節(jié)點。從節(jié)點可以通過offset進行排名并通過該排名延遲發(fā)起故障轉(zhuǎn)移的時機。 # 2) 每個獨立的從節(jié)點計算最近一次與主節(jié)點交互的時間。這里的交互可以是最近一次PING、最近一次接收到來自主節(jié)點的命令、與主節(jié)點斷開連接的時間(當復制鏈接已經(jīng)down掉時)。如果最近一次與主節(jié)點的交互已經(jīng)足夠久遠,那么這個從節(jié)點將放棄進行故障轉(zhuǎn)移。 # 在2)中的時間閾值可以由用戶設(shè)定。特別地,當從節(jié)點的最近一次與主節(jié)點的交互遠大于(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秒,當從節(jié)點距離最近一次與主節(jié)點的交互時間大于310秒(30*10+10)時,該從節(jié)點不能進行故障轉(zhuǎn)移。 # 一個過大的從節(jié)點有效因子(slave-validity-factor)會允許存儲過舊數(shù)據(jù)的從節(jié)點進行故障轉(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)絡分區(qū)消失后,集群仍繼續(xù)工作的值。 # 設(shè)置格式如下: # cluster-slave-validity-factor 10 # 5 從節(jié)點遷移屏蔽因子(cluster-migration-barrier) # Redis集群支持將從節(jié)點遷移到孤立主節(jié)點(orphaned masters),沒有可以工作從節(jié)點的主節(jié)點)。該功能減少了集群孤立主節(jié)點故障但沒有可工作從節(jié)點進行故障轉(zhuǎn)移的情況的發(fā)生。 # 從節(jié)點可以遷移到孤立主節(jié)點當且僅當原來的主節(jié)點的剩余可工作從節(jié)點個數(shù)大于等于指定的可工作從節(jié)點數(shù)。這個數(shù)稱為從節(jié)點遷移屏蔽因子(migration barrier)。當遷移屏蔽因子設(shè)置為1時,當且僅當主節(jié)點擁有至少兩個可工作的從節(jié)點才允許其中從節(jié)點遷移到孤立主節(jié)點(orphaned masters)。該因子通常用來表明使用者需要為集群中的主節(jié)點配置從節(jié)點個數(shù)。 # 默認遷移屏蔽因子是1(從節(jié)點可以執(zhí)行遷移當前僅當其主節(jié)點在該節(jié)點遷移后仍保有至少一個從節(jié)點)。如果想關(guān)閉該功能,只需將該參數(shù)設(shè)置成一個極大值即可。 # 允許將遷移屏蔽因子置零。這種行為僅在調(diào)試時有用,且在生產(chǎn)環(huán)境中存在極大風險。 # 配置格式如下: # cluster-migration-barrier 1 # 6 是否支持集群部分可用 # 默認情況下,Redis集群將停止接收客戶端請求(停止服務)當集群檢測到存在哈希槽沒有對應負責的節(jié)點。也就是說,如果集群部分down(如有一部分哈希槽沒有對應的節(jié)點),整個集群最終將會不可用。(集群信息傳播遵循最終一致性) # 當所有的槽都再次有對應負責的節(jié)點后,集群將會自動再次可用。 # 但是有時希望即使集群只有部分槽有對應的節(jié)點,集群也能繼續(xù)接受客戶端請求并處理對應的鍵空間。為了達到上述目的,將ecluster-require-full-coverage 設(shè)置為“no”即可。 # 配置格式如下: # cluster-require-full-coverage yes # 創(chuàng)建集群的指導文檔在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)存儲超時命令。(當慢日志滿后,新命令添加進去后,最老的命令將被踢出) # 單位是微秒(microsecond,106微秒等于1秒)。當該值為負數(shù)時表示禁用slow log功能。當該值為零時,表示強制使用slow log記錄每一條命令。 # 默認慢日志功能是開啟的,slowlog-log-slower-than時間上限是104微秒。 slowlog-log-slower-than 10000 # 2 慢日志長度 # slow log保存在內(nèi)存中,只要內(nèi)存容量足夠,可以隨意設(shè)定慢日志長度。可以使用SLOWLOG RESET命令重新設(shè)置慢日志長度。 # 默認設(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值的操作。當該值為零時, # 則表明關(guān)閉latency monitor。 # # 默認情況下,latency monitor功能是關(guān)閉的,因為大多數(shù)場景下并不需要該功能。 # latency monitor可以在Redis運行時通過"CONFIG SET latency-monitor-threshold # "啟動。 # latency monitor設(shè)置格式如下: latency-monitor-threshold 0 ############## # 事件通知配置: ############################# EVENT NOTIFICATION ############################## # # 1 設(shè)置事件通知 # Redis 可以通知那些已Pub/Sub客戶端鍵空間發(fā)生的事件。 # 該功能對應的文檔是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對通知的事件進行了分類,每一類都使用唯一的字符標記: # K 鍵空間(Key)通知,前綴為:__keyspace@ __ # E 鍵事件(Event)通知,前綴為:__keyevent@ __ # 對于所有命令類型和非鍵事件,均使用小寫字母表示,且沒有前綴。 # 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 # 默認情況下,事件通知功能是關(guān)閉的,因為大多數(shù)用戶并不需要這個功能且這個功能會帶來額外的性能開銷。 # 注意,如果沒有指定鍵空間(K)通知還是鍵事件(E)通知,那么任何事件通知都不會被傳送。 # 默認設(shè)置如下: notify-keyspace-events "" ############ # 高級配置: ############################### ADVANCED CONFIG ############################### # # 1 Hash類型 # Hash數(shù)據(jù)類型的底層實現(xiàn)有壓縮鏈表(ziplist)和哈希表(hash)。當且僅當存儲的數(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 <– 對于普通的工作負載,不建議使用 # -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é)點準確存儲指定數(shù)量的elements # 最高效的參數(shù)設(shè)置是-2 (8 Kb size) 或 -1 (4 Kb size) # 但是,如果需求很特殊,則應根據(jù)需要調(diào)整參數(shù): list-max-ziplist-size -2 # 3 List類型壓縮深度設(shè)置 # List可以實現(xiàn)壓縮 # 壓縮深度是劃定quicklist、ziplist等list在壓縮時的節(jié)點范圍。為了進行快速的push/pop操作,不會對list的head和tail進行壓縮,只會對中間節(jié)點進行壓縮。參數(shù)設(shè)置如下: # 0: 關(guān)閉list壓縮功能 # 1: 深度為1表示只有當list添加一個節(jié)點(無論從head還是tail添加該節(jié)點)后才開始進行壓縮。 # 所以對于[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)默認是intSet,也可以是hash。 # Set使用hash編碼格式當且僅當字符串組成的set變成底數(shù)為10的整數(shù),且其值范圍在64位整數(shù)中。 # 下面的配置設(shè)置用來指定set可以使用特殊編碼格式的閾值: set-max-intset-entries 512 # 5 Sorted Set類型 # Sorted Set默認使用ziplist實現(xiàn),也可通過skiplist編碼實現(xiàn)來節(jié)省空間。 # 當且僅當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中。當使用稀疏表示的HyperLogLog存儲的字節(jié)超過了指定的閾值,它將轉(zhuǎn)變成稠密表示。 # 不建議使用大于16000的值。當小于16000時能夠獲得較高存儲效率。 # 建議的值是3000,該值可以在較少PFADD(在執(zhí)行稀疏編碼時時間復雜度是O(N))操作執(zhí)行的同時獲得極高空間使用收益。當CPU問題無需考慮時,可將該值提升到10000,但其值不應超過 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í)行的步驟也越多。所以當server很空閑時,rehash將很簡單,hash table也會有更多的內(nèi)存可以使用。 # 為了在條件許可的情況下對hash table進行rehash,從而節(jié)省內(nèi)存空間,默認情況下,rehash功能會每100毫秒中1 毫秒被調(diào)用一次。 # 如果不確定: # 使用"activerehashing no" 如果當前應用環(huán)境很注重延遲、Redis僅允許2毫秒的延遲應答。 # 使用"activerehashing yes" 如果當前應用環(huán)境不是太注重延遲且想要盡可能塊的釋放內(nèi)存空間。 # 默認該功能開啟: activerehashing yes # 8 客戶端輸出緩沖區(qū) # 客戶端輸出緩沖區(qū)可以用來強制斷開那些不能夠快速讀取服務器數(shù)據(jù)的客戶端連接。(如在Pub/Sub模式中,客戶端不能夠快速的處理publisher發(fā)送過來的消息) # 客戶端類型可以細分為三類: # normal -> 普通客戶端(包括MONITOR客戶端) # slave -> 從節(jié)點客戶端 # pubsub ->訂閱至少一個pubsub通道或模式的客戶端 # client-output-buffer-limit 設(shè)置的通用格式如下: # client-output-buffer-limit # 一旦hard limit達到,客戶端將直接斷開連接。如果soft limit 達到,客戶端連接將會持續(xù)soft seconds 后才斷開連接。 # 例如,當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,客戶端連接將馬上斷開。 # 默認情況下,不需對normal級別的clients進行約束因為這些客戶端如果沒有發(fā)起詢問就不會接受數(shù)據(jù)。所以,只需對異步客戶端進行約束因為異步客戶端會出現(xiàn)請求速度大于read速度的情況。 # 因為訂閱者和從節(jié)點使用推的方式接受數(shù)據(jù),所以需要對pubsub 客戶端和slave客戶端設(shè)置默認的客戶端輸出緩沖區(qū)約束。 # 將hard limit 或 soft limit 置零表示關(guān)閉對應的功能。 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í)行后臺任務,如在timeout時關(guān)閉客戶端連接,清除從未被請求的過期鍵,等等。 # 雖然并不是所有的tasks都使用同樣的頻率執(zhí)行,但是Redis會根據(jù)指定的頻率值來檢測tasks的執(zhí)行。 # 默認設(shè)置的值為10,即每秒執(zhí)行10次。在Redis處于空閑提升該值時,將會消耗更多的CPU。但是,提升該值也會使Redis更精確的處理超時問題,并檢測到更多的過期鍵。 # 該值設(shè)置范圍是1到500。但是不建議將其設(shè)置大于100。大多數(shù)的用戶建議使用默認的值(10),并根據(jù)應用環(huán)境的低延遲需求適當提升該值(峰值建議不要大于100)。 # 格式如下: hz 10 # 10 AOF重寫與磁盤同步 # 子進程在執(zhí)行重寫AOF文件時,如果啟動該功能,則數(shù)據(jù)每增長32MB就進行一次文件磁盤同步。該功能對加快文件同步到磁盤、避免大的延遲峰值有很大幫助。 # 默認該功能啟動。格式如下: aof-rewrite-incremental-fsync yes
以上是“Redis3.2.6配置文件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!