Redis3.2.6配置檔案詳細中文說明
阿新 • • 發佈:2020-01-09
Redis3.2.6最新配置檔案詳細中文說明,啥都不說直接看說明
############## # 指定配置檔案: ################################## INCLUDES ##################################### # # 1 包含檔案 # 如果想要使用到配置檔案,Redis服務必須以配置檔案的路徑作為第一個引數啟動。如:./redis-server /path/to/redis.conf # 單位說明:當需要指定記憶體大小時,可能會使用到不同的單位,如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 關鍵字來include這些個性化配置檔案。 # 注意:雖然admin 或Redis Sentinel下執行的“CONFIG REWRITE”命令(Redis 2.8 引入的命令)會重寫配置,但並不包含“include”關鍵字。也就是說“CONFIG REWRITE”覆蓋“include”相關內容。 # 由於redis以最後的配置作為直接配置,所以建議將include命令放置在配置檔案的最前面以防止配置被覆蓋。 # 但是如果打算使用另外的配置檔案來覆蓋當前檔案的部分或全部配置,那麼則可將include命令放置到該檔案的末尾。 # Redis這裡使用了最後生效原則,即最後被解析的配置將作為最後的配置。 # 格式如下: # include /path/to/local.conf # include /path/to/other.conf ############## # 網路配置: # 對伺服器網路相關的引數進行一個配置。 ################################## NETWORK ##################################### # # 1 bind命令 # 我們知道,一臺伺服器上可能有多個網路介面,所以如果沒有使用bind指定介面,Redis將監聽該機器上的所有網路介面的連線請求。 # 如果僅需要監聽一個或多個指定的介面,則可以使用“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監聽IPv4環回介面地址,也就是說Redis僅接受本機的客戶端請求。 # 伺服器可以有一個網路介面(通常表述為網絡卡),或者多個。假設某機器上有兩個網絡卡,分別為192.168.205.5 和192.168.205.6,如果bind 192.168.205.5,那麼只有該網絡卡地址接受外部請求,如果不繫結,則兩個網絡卡口都接受請求。 # 如果需要進行外網訪問則需登出該命令列。在配置檔案中,“#”代表註釋。 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bind 127.0.0.1 # 2 保護模式 # 保護模式是Redis提供的安全防護層。設立該層是為了避免網路對未關閉Redis例項的隨意訪問。 # 該模式需要開啟,當: # 1) 沒有使用“bind”命令明確需要繫結的地址; # 2) 沒有為Redis配置密碼。 # 該模式啟動後,伺服器僅能接受使用IPv4、IPv6環回地址(127.0.0.1或::1)和本地Socket的客戶端的連線請求。 # 預設情況下,保護模式是開啟的。建議只有在已明確待連線的客戶端無需授權或無需使用bind指定特定的介面時才關閉該模式。 # 使用如下: protected-mode yes # 3 埠 # 在指定的埠上進行監聽,預設是 6379。當埠設定為0時,Redis就不會在TCP socket上進行監聽。 # 使用如下: port 6379 # 4 TCP listen() backlog設定 # 在一個併發量高的環境中,需要指定一個比較大的backlog值來避免慢連線情況的發生。注意,linux核心會預設使用/proc/sys/net/core/somaxconn值來減小backlog實際值。因此為了獲得期望的值,需要確保增大 somaxconn 和 tcp_max_syn_backlog 這兩個值。 # 建議配置: tcp-backlog 511 # 5 Unix socket # 指定Unix socket路徑來進行連線監聽。預設是不指定,因此redis不會在Unix socket上進行監聽。 # 使用方法如下: # unixsocket /tmp/redis.sock # unixsocketperm 700 # 6 Client timeout # 當client在空閒N秒後,關閉該連線(0表示不處理空閒連線,預設方式) # 例項: timeout 0 # 7 TCP keepalive時間 # 當該值非零時,如果通訊缺失,Redis會使用SO_KEEPALIVE傳送TCP ACKs給客戶端。這樣做的好處有二: # 1)檢測已經死亡對端。(TCP關閉存在無法完成4次握手的情況,如斷電,斷網,資料丟失等等) # 2)儲存已有連線的活性。 # 在Linux中,該指定時間是一次傳送ACKs的時間片。對於其他核心系統,其時間片大小與核心配置有關。 # 一個比較合理的值是300 seconds。Redis 3.2.1版本之後預設指定該值為300 seconds。 # 例項如下: tcp-keepalive 300 ############## # 通用配置: # 對一些通用引數進行配置。 ################################# GENERAL ##################################### # # 1 daemon # 預設情況下,Redis並不是一個守護程序,如果需要將Redis設定成守護程序,則可以使用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 – 根據環境變數UPSTART_JOB 或NOTIFY_SOCKET檢測upstart 還是 systemd # 注意,上述supervision方法(upstart或systemd)僅發出“程式已就緒”訊號,不會繼續給supervisor返回ping回覆。 # 預設是不開啟: supervised no # 3 pid檔案 # 如果指定了pid檔案,Redis會在啟動時寫該pid檔案,在退出時刪除該檔案。 # 當Redis伺服器已守護程序啟動時,如果指定了配置檔案,則直接使用,如果沒有指定,則建立/var/run/redis.pid作為配置檔案。 # 使用如下: pidfile /var/run/redis_6379.pid # 4 日誌級別 # 指定伺服器的verbosity級別。Redis提供四種級別: # debug —- 包含大量資訊,用於開發和測試 # verbose —- 包含一些稀有的有用資訊,但沒有debug級別混亂 # notice —- 適量提示資訊,用於生產環境 # warning —- 只包含非常重要和關鍵的資訊 # 預設是notice級別: loglevel notice # 5 日誌檔名稱 # 指定日誌檔名稱。指定為空時將輸出到標準輸出裝置中。如果Redis以守護程序啟動,當日志文件名稱為空時,日誌將會輸出到 /dev/null。 # 預設設定如下: logfile "" # 6 寫系統日誌 # 6.1允許寫系統日誌 # 將syslog-enabled設定為yes時, 允許將Redis服務日誌記錄到系統日誌中。此外,還 # 可以使用更多的日誌引數來滿足特定要求。 # 例項如下: # syslog-enabled no # 6.2指定在系統日誌身份 # 一旦enable寫入系統日誌,可以指定服務在系統日誌身份。例項如下: # syslog-ident redis # 6.3指定系統日誌能力級別 # 系統日誌級別必須是 LOCAL0 到 LOCAL7 之間(閉區間)的值。例項如下: # syslog-facility local0 # 7 資料庫數量 # 設定資料庫的數量。預設使用0號資料庫。可以在每一個連線上使用SELECT <dbid> 來指定另外的資料庫,但是這個值必須在 0到 ‘database'-1之間。 # 例項如下: databases 16 ################ # 快照配置: # Redis提供快照功能,記錄某一時刻資料庫中儲存的資料。 ################################ SNAPSHOTTING ################################ # # 1 DB持久化 # 將DB資料儲存到磁碟。格式為:save <seconds> <changes>。當在規定的時間內seconds,如果寫磁碟的次數超過了changes,則將DB資料儲存到磁碟。如save 900 1表示在900秒內,如果對DB進行了至少一次寫操作,則將DB資料持久化到磁碟上。 # 注意,可以通過登出所有save命令或將在所有save命令後追加save置空(save “”)命令來禁用save功能。使用示例: save 900 1 save 300 10 save 60 10000 # 2 bgsave-error # 預設情況下,在發生RDB快照或BGSAVE執行失敗的那一刻,Redishi執行接收寫請求。這會使使用者察覺(通常比較困難)到資料沒有正確的持久化到磁碟。否則有可能出現不被察覺的災難性後果。 # 當後臺BGSAVE程式可以再次開始工作時,Reidis會再次自動允許寫入。 # 如果已經對Server和伺服器持久化建立了正確的監控,那麼當你禁用該功能後,即使磁碟、持久化等出現問題,Redis也能繼續提供服務。 # 例項如下: stop-writes-on-bgsave-error yes # 3 rdbcompression # 預設情況下,在dump RDB檔案時,Redis採用LZF(一種高效的壓縮演算法)演算法進行字串物件資料的壓縮,其效能較高。雖然LZF演算法會消耗部分CPU效能,但是其資料壓縮能夠較高,所以建議不要關閉: rdbcompression yes # 4 RDB檔名稱 # 該命令用於定義dump DB檔案的檔名。格式如下: dbfilename dump.rdb # 5 工作目錄 # 指定RDB檔案所在目錄。該目錄也是AOF檔案所在目錄。注意,這裡是指定一個目錄而不是檔名。預設是當前目錄,格式如下: dir ./ ################## # 複製配置: # Redis提供主從複製功能保證資料的可靠性。 ################################# REPLICATION ################################### # # 1 主從關係建立 # Redis主從複製。單機模式下,Redis支援使用slaveof命令從另一個Redis伺服器的拷貝中來建立一個例項。叢集模式下則使用cluster replicate <master-id>命令。Redis複製使用前須知: # 1)Redis複製是非同步複製,但是可以配置連線的從節點數量。 # 2)當連線斷開,Redis從節點支援部分重同步(psync)功能來保證主從節點資料同步。 # 3)複製過程是一個自動化過程,無需人工干預。當出現網路分割槽後,從節點會自動嘗試建立與主節點的連線,並嘗試同步。 # 建立主從連線的命令如下: # slaveof <masterip> <masterport> # 2 授權密碼 # 當主節點開啟密碼保護時(通過配置"requirepass" 命令),從節點必須在開始複製同步前進行授權操作,否則其請求不會被接受。 # 命令如下: # masterauth <master-password> # 注意,該命令只有在主節點開啟密碼保護時才生效。 # 3 從節點是否支援髒讀 # 當主從斷開連線或主從進行復制時,從節點對外擁有兩種策略: # 1)如果“slave-serve-stale-data”引數設定成“yes”(預設情況下),則從節點可以響應客戶端請求,儘管可能會恢復過期資料或空資料(如果主從第一次進行同步)。 # 2)如果“slave-serve-stale-data”引數設定成“no”,則從節點會對除INFO 和SLAVEOF之外的命令返回"SYNC with master in progress"資訊。 # 預設設定如下: slave-serve-stale-data yes # 4 從節點是否支援寫入 # 指定從節點是否支援寫操作。當需要儲存一些臨時資料時,讓從節點支援寫操作很有用。這樣一來,就可以通過主從同步輕鬆的將已寫入從節點的資料刪除。但是,如果配置出錯,也會出現客戶端寫入出錯等問題。 # 注意,從Redis 2.6之後,從節點預設是隻讀的。 # 提示,只讀的從伺服器並不是設計給非信任的網際網路客戶端提供服務。這種模式的伺服器設定只是一個用來防止對伺服器例項進行誤操作的保護層。預設情況下,只讀從伺服器能夠輸出管理員命令,如CONFIG、 DEBUG等。如果想限制只讀從節點輸出的管理型命令,可以通過'rename-command' 命令來隱藏這些管理員命令或危險命令。 # 提高它的安全性,使得她作為一個影子來執行管理或者危險的命令。預設設定如下: slave-read-only yes # 5 複製策略:有無磁碟 # 主從節點的資料同步策略有兩種:磁碟同步、套接字同步。 # ——————————————————- # WARNING: 無磁碟複製(DISKLESS REPLICATION I)當前仍處於實驗階段 # ——————————————————- # # 對於新連線的slaves或斷開重連的slaves將無法執行“部分同步”,需要進行一次完全同# 步。當進行完全同步時,主節點將傳播一個RDB檔案給從節點。該RDB檔案的傳播方式# 有兩種: # 1)基於磁碟:Redis主節點建立一個新程序將RDB檔案寫到磁碟,然後將生成的RDB檔案傳播給從節點。 # 2)無磁碟:Redis主節點建立一個新程序直接將RDB檔案寫到slaves的套接字中,RDB檔案無需落盤。 # 基於磁碟的複製,一旦RDB檔案生成,多個slaves將排隊等待並可以共享該檔案。而無磁碟複製一旦開始傳輸資料,新slaves到來後將會排隊等待。 # 在使用無磁碟複製時,主節點在開始傳輸同步資料前將根據配置的時間進行等待,從而實現多個從節點的併發傳輸。 # 在磁碟速度緩慢且網路速度很快(高頻寬)時,無磁碟複製效率更高。預設情況下,無磁碟複製同步關閉。配置如下: repl-diskless-sync no # 6 無磁碟複製等待時間 # 無磁碟複製前,主節點需要等待的時間。該配置在啟用無磁碟複製時將生效。 # 由於一旦開啟一次資料傳輸,其餘slaves將排隊等待,所以最好讓主節點等待一段時間,這樣主節點就可對多個slaves併發傳播資料。 # 等待的單位是秒(second),預設是5秒。一旦將其設定為0,主節點將會馬上開始資料傳輸。預設配置如下: repl-diskless-sync-delay 5 # 7 slaves定時向master傳送PING的時間片 # 預設情況下,slaves每10秒向master傳送一次PING訊息。可以根據網路等因素進行設定。該配置預設在配置檔案中關閉: # repl-ping-slave-period 10 # 8 複製超時閾值 # 以下情境將使用到複製超時閾值: # 1) 從節點在執行SYNC期間,檢測塊檔案傳輸超時 # 2) 從節點檢測主節點離線(data、pings) # 3) 主節點檢測從節點離線(REPLCONF ACK) # 必須要確保複製超時閾值(repl-timeout)大於slaves定時向master傳送PING的時間片(repl-ping-slave-period),否則將總會檢測到複製超時(當slave傳送PING的時間片大於複製超時閾值時,slave還未傳送ping就會被定性為複製超時)。使用格式如下: # repl-timeout 60 # 9 TCP_NODELAY功能 # 執行完SYNC後,是否要禁用TCP_NODELAY。 # 當禁用該功能後,Redis會使用佔用更少頻寬的小TCP包向從節點發送資料。但是這樣做將會增大從節點端資料傳輸延時。在Linux下禁用TCP_NODELAY功能將導致40 微秒的延遲。 # 當啟動該功能後,在進行復制時將會減少資料傳輸延遲,但是會佔用更大的頻寬。 # 預設情況下,我們優先選擇低延遲,但是在高速網路或主從節點存在多hops路徑時,建議禁用TCP_NODELAY功能。 # 預設開啟TCP_NODELAY功能。格式如下: repl-disable-tcp-nodelay no # 10 複製積壓緩衝區大小 # 設定複製積壓緩衝區(replication backlog)大小。當slaves斷開與節點連線後,Redis使用複製積壓緩衝區記錄需要未傳送給slave的資料。當從節點重連後,僅需執行一次部分同步,將從節點缺失資料補全。 # 複製積壓緩衝區(replication backlog)越大,Redis可以支援的slave離線時間就越長。複製積壓緩衝區用於部分重同步。 # 複製緩衝區只有在有slave連線時才分配記憶體。沒有slave時,該記憶體會被釋放出來,預設大小為1m。格式如下: # repl-backlog-size 1mb # 11 複製積壓緩衝區釋放時間片 # 當主節點不再有新連線的從節點後,複製積壓緩衝區將會被釋放。為避免因從節點頻繁掉線後上線而頻繁的進行復制積壓緩衝區的釋放與申請,Redis提供複製積壓緩衝區釋放時間片(repl-backlog-ttl)引數,保證主節點在檢測到從節點掉線後的規定時間內不會釋放該緩衝區。 # 值為零時表示不會釋放該複製積壓緩衝區。 # 單位為秒,配置如下: # repl-backlog-ttl 3600 # 12 從節點優先順序 # 使用整數表示從節點優先順序。 # 當主節點無法正常工作後,Sentinel將使用該優先順序在從節點中推選出新的主節點。 # 優先順序對應的整數值越小,被推選成主節點的可能性更大。但是當優先順序的值為零時表示該從節點不具備成為主節點的身份。 # 預設優先順序為100。配置形式如下: slave-priority 100 # 13 從節點連線數及從節點延時設定 # 當主節點的已連線從節點數小於N且這些從節點延遲均大於M秒,該主節點將停止接收寫請求。 # 從節點處於“online”狀態,當且僅當延遲(通過計算距離上一次接收從節點的ping訊息的時間間隔獲得)小於指定的閾值。 # 這個選項配置不是用來保證N個部分接收寫資訊,而是為了在沒有足夠的從節點可用時,限制寫丟失。 # 如需要至少需要3個從節點並在10s內可用,則設定: # min-slaves-to-write 3 # min-slaves-max-lag 10 # 一旦對這兩個中的一個賦值為零,則該功能失效。 # 預設min-slaves-to-write 引數設定為0,即該功能預設不啟用。 # 14 從節點指定的IP和port # Redis主節點可以通過多種途徑顯示已連線從節點的IP和port。如Sentinel 可以使用“INFO replication”命令來發現從節點例項;Master可以使用“ROLE”命令顯示從節點IP和port資訊等。 # slave獲取IP和port的方式是: # IP:自動檢測獲取。當從節點連線主節點時,通過檢查對應套接字地址獲取。 # Port:從節點在複製中和主節點握手時需要使用到port。通常情況下,port即為連線時的port。 # 但是,當發生埠轉發(port forwarding,轉發一個網路埠從一個網路節點到另一個網路節點的行為)或使用NAT(Network Address Translation,網路地址轉換)技術是,從節點需要被分配不同IP和port後才能被訪問。 # 接下來的兩個配置用來設定從節點的IP和port,用來告知主節點所指定的IP和port,這樣INFO和ROLE 才能繼續返回結果。 # 當需要重寫IP和port時,則無需配置該選項。 # 配置格式如下: # slave-announce-ip 5.5.5.5 # slave-announce-port 1234 ############## # 安全配置: # Redis提供一些安全策略,儘量保證訪問安全性。 ################################## SECURITY ################################### # # 1 認證密碼 # Server在處理客戶端命令前,該客戶端需要提供提供認證密碼。這在非可信網路環境中很有用。 # 為減少後臺執行復雜度,這個選項一般都會被註釋掉。因為大多數使用者不需要授權。(如使用者使用自己的伺服器) # Warning: 由於Redis執行高效,所以外部使用者每秒可以嘗試認證15w次。也就是說,為避免密碼被快送攻破,使用者需要使用一個極其複雜的密碼。 # 設定認證密碼格式如下: # requirepass foobared # 2 命令重新命名 # 重新命名命令。 # 在一個共享環境中有必要對危險命令進行重命令,從而避免危險命令的濫用、無用。 # 如給CONFIG命令重新設定一個難以猜測的命令,這樣這個命令就很難被普通使用者使用的,但仍能被內部工具使用。 # 如: # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # 當然,有時需要禁用一些命令。可以通過將命令置空實現: # rename-command CONFIG "" # 注意,一定要避免重新命名那些寫AOF檔案或傳輸資料給slaves的命令,否則將會導致各種難以預料的錯誤。 ########### # 限制配置: # 對一些引數範圍進行限定。 ################################### LIMITS #################################### # # 1 最大客戶端連線數 #設定某一時刻客戶端的併發連線數。預設情況下,限制上限是1w。但是,如果Redis伺服器沒有配置程序檔案limit,那麼可允許連線的最大客戶端個數將被設定為當前檔案限制的最小值32(Redis會保留一部分檔案給內部使用者)。 # 一旦得到了連線上限,Redis將關閉所有新連線併發送錯誤“max number of clients reached”提示。連線上限配置格式如下: # maxclients 10000 # 2 最大可用記憶體 # 不要再記憶體超過指定限制時仍然使用記憶體。 # 當達到記憶體上限時,Redis會根據選定的過期鍵策略移除一些key。 # 如果根據過期鍵策略仍不能移除一些鍵或者過期鍵策略設定成“noeviction”(不啟用過期鍵策略),那麼Redis會向如SET、LPUSH等使用記憶體的命令返回錯誤,向諸如GET等讀命令正常返回結果。 # 這個配置通常在將Redis當過LRU 快取或對以設定硬性的記憶體上限的Redis很適用。 # WARNING: slaves的輸出緩衝區不在主節點的maxmemory計算中,所以設定的maxmemory不宜過大。如果過大,可能導致主機的剩餘記憶體過小,從而不能預留足夠的記憶體用於建立slaves的輸出緩衝區。 # 簡言之,如果當前節點存在已連線的從節點,建立設定一個較小的maxmemory上限,這樣系統就可以有多餘的RAM用與建立從節點輸出快取。(當過期鍵策略設定成'noeviction'時,則沒有必要這麼做) # 設定格式如下: # maxmemory <bytes> # 3 記憶體淘汰策略 # MAXMEMORY POLICY: 當達到maxmemory時,可以採用的記憶體淘汰策略。 # Redis提供五種記憶體淘汰策略: # 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 # 預設記憶體淘汰策略是'noeviction'。 # 4 最大樣例檢測數 # LRU演算法和最小TTL演算法都不是精確演算法,所以可以對其進行執行速度或精確度上的判定。 # 預設情況下,Redis會從五個鍵中選擇一個最近最久未使用的鍵進行淘汰。可以通過配置該選擇設定檢測基數。 # 一般情況下,五個檢測樣本可以獲得足夠好的結果。10個樣本的結果更接近LRU演算法,但是會消耗更多的CPU。3個樣本可以獲得較高的執行速度但是不夠精確。 # 配置格式如下: # maxmemory-samples 5 ############## # AOF配置: # AOF持久化模式對應的一些配置。 ############################## APPEND ONLY MODE ############################### # # 1 是否開啟AOF持久化功能 # 預設情況下,Redis會非同步將資料集快照到磁碟上。儘管這種模式對許多應用友好,但是當Redis程序崩潰或發生掉電時,幾分鐘內的寫資訊將丟失(根據快照執行的粒度)。 # AOF作為一種可替換的持久化策略,能夠提供更好的耐久性。如使用預設的fsync策略,Redis僅會丟失1s的寫資訊,當發生突發事件(伺服器掉電、伺服器程序崩潰但OS執行正常) # AOF持久化和RDB持久化可以同時開啟。如果在啟動Redis時已經存在AOF檔案,則會直接載入AOF檔案(考慮到AOF檔案相比RDB檔案有更好的耐久性)。 # 關於AOF的更多訊息見: http://redis.io/topics/persistence # 預設AOF關閉,配置如下: appendonly no # 2 指定AOF檔名稱 # 指定AOF檔名稱,預設是appendonly.aof。配置如下: appendfilename "appendonly.aof" # 3 fsync()系統函式呼叫頻率 # 呼叫fsync()系統函式用來告知OS將資料寫入磁碟,而不是在輸出緩衝區等待資料。有些OS將直接flush資料到磁碟,有些其他的OS僅會嘗試去flush。 # Redis支援三種fsync()呼叫模式: # no:不執行fsync,由OS決定flush資料的頻率。高效。Linux下預設是每30s執行一次flush。 # always:每寫入一次AOF就呼叫一次fsync。慢,最安全。 # everysec:每秒呼叫一次fsync。適中。 # 預設fsync的呼叫頻率是“everysec”,這種策略在執行速度和資料安全進行折中。 # 當可以容忍一定程度資料丟失並期望更高的效能時,可以使用“no”策略(由作業系統決定flush的頻率)。相反的,如果不能容忍資料丟失,可以使用“always”獲得更好的安全性,儘管執行更慢。 # 更多AOF資訊可以參考: # http://antirez.com/post/redis-persistence-demystified.html # 在無法確定fsync呼叫頻率時,推薦使用“everysec”策略。 # 在開啟AOF持久化功能後,該配置才會生效。 # 配置設定如下: # appendfsync always appendfsync everysec # appendfsync no # 4 AOF rewrite與fsync # 當AOF執行fsync的策略是always和everysec時,如果此時有一個後臺程序(BGSAVE程序或AOF rewrite程序)正在執行大量的I/O操作到磁碟,在一些Linux系統中,執行fsync會造成較長的阻塞。當前對這種情況還沒有很好的解決策略,即使在不同的執行緒中執行fsync也會導致呼叫同步write(2)阻塞。 # 為了緩解上述問題,可以通過配置下述選項來避免在主執行緒呼叫fsync()時執行BGSAVE或 BGREWRITEAOF帶來的阻塞。 # 也就是說,預設情況下,當子程序執行BGSAVE或BGREWRITEAOF時,Redis的耐久性將預設轉變成"appendfsync none"。在實際的應用中就意味著在最壞的場景下將丟失30s的資料,即使配置了fsync呼叫頻率為always或everysec。(預設情況下,Linux每30s自動呼叫一次fsync將快取資料flush到磁碟) # 如果當前應用已考慮延遲問題,則將該配置設定成“yes”。否則使用預設配置(“no”),這是從耐久性角度考慮的最安全的選擇。 no-appendfsync-on-rewrite no # 上述配置等價於appendfsync-on-rewrite(在rewrite時仍執行fsync) # 4 AOF rewrite觸發時機 # 設定AOF 重寫的觸發條件。 # 當AOF日誌按照指定的比例增長時,可以通過呼叫BGREWRITEAOF執行自動的AOF rewrite。 # 工作原理:Redis通過對比上一次執行rewrite時AOF檔案的大小與當前AOF檔案大小(在重啟時將沒有上一次執行rewrite的記錄,這時將使用startup時的AOF檔案大小),決定是否進行rewrite。 # 如果當前AOF對於上一次執行rewrite的AOF檔案的增長比率大於指定的比率,將會觸發一次rewrite。 # 當然,還需指定一個AOF進行重寫的最小單位。這樣做可以避免增長比率已經達到要求,但對應的AOF仍很小的情況(這種情況下沒有必要進行rewrite)的發生。 # 如果想要關閉自動AOF rewrite功能,可將進行rewrite要求的增長比率設定0。 # 預設當AOF大於64MB且相比於上一次rewrite,AOF以擴充了兩倍時會觸發一次rewrite執行。預設配置如下: auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 5 AOF 檔案不完整 # 在將AOF檔案載入到記憶體時(重啟Redis),可能會出現AOF被截斷的情況。 # 如當Redis執行所在系統突然崩潰(當ext4檔案系統在安裝時沒有配置成資料按序儲存),會出現AOF被截斷情況。 # 如果Redis程式發生崩潰或異常,但作業系統仍能正常工作,則不會出現AOF被截斷的情況。 # 出現AOF被截斷後,Redis要麼直接退出並返回錯誤,要麼載入被截斷AOF中儘可能多的資料(當前預設方式)。 # 可以通過aof-load-truncated選項進行配置 # 當aof-load-truncated設定成“yes”,Redis仍會載入一個被截斷的AOF檔案,同時向用戶報告AOF檔案被截斷。如果設定成“no”,Redis會直接返回錯誤並拒絕啟動,這時使用者需要使用"redis-check-aof"程式修復AOF,只有這樣才能重啟Server。 # 注意,如果AOF檔案在執行一半時就出現問題,即使設定aof-load-truncated為 “yes”,Redis也會直接退出並返回錯誤。 # 這個配置僅在Redis嘗試從AOF檔案讀更多資料但發現沒有足夠字計數存在時有意義。 # 預設開啟該功能。 aof-load-truncated yes ############# # LUA指令碼處理: ################################ LUA SCRIPTING ############################### # # 1 Lua指令碼執行超時閾值 # 設定Lua指令碼執超時的時間上限,單位是毫秒,milliseconds。 # 當Lua指令碼執行超時,Redis會記錄指令碼執行之後的結果(超時後)並向查詢返回錯誤。 # 當一個長時指令碼執行時間超過最大執行時間時,只有SCRIPT KILL和 SHUTDOWN NOSAVE 命令可用。停止這類指令碼執行的第一個方法是呼叫一個非寫命令。第二種方法是shut down 這個server,如果已經發送了一個寫命令但使用者並不想等待指令碼自然終止。 # 如果想不限制指令碼的執行時間並且不需要返回warning,可以將該引數設定成0或負數。 # 預設配置如下: lua-time-limit 5000 ############### #Redis 叢集配置: ################################ REDIS CLUSTER ############################### # # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # WARNING EXPERIMENTAL: 儘管當前Redis Cluster程式碼已經穩定,但是為了將這部分程式碼水準標記為“mature”, # 仍需要一批有分量的使用者將該功能應用到生產環境。即Redis Cluster功能仍需要生產實踐的考驗。 # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # 1 啟動Redis叢集功能 # 正常情況下,啟動的Redis例項為非叢集模式。只有當節點配置成叢集模式時才能成為叢集節點。如需以叢集模式啟動,取消下述配置的註釋即可: # cluster-enabled yes # 2 叢集配置檔案命令 # 每個叢集節點都有一個叢集配置檔案。該檔案不是用來讓使用者編輯,而是持久化叢集資訊。 # 該檔案由叢集節點建立並更新。每個Redis 叢集節點都需要有唯一的叢集配置檔案。所以在同一系統建立的多個Redis例項需要確保不存在配置檔名相同的情況發生(這樣會導致叢集配置檔案過載)。 # 叢集配置檔案命令格式如下: # cluster-config-file nodes-6379.conf # 3 叢集節點超時閾值 # 叢集節點超時閾值用來作為節點不可達並被標記為失效狀態的超時上限,單位是毫秒(millisecond) # 大部分其他內部時間將其基本參考數。 # 設定方式如下: # cluster-node-timeout 15000 # 4 從節點可發起故障轉移的判定因子(slave-validity-factor) # 當主節點失效後,Redis避免讓儲存資料過舊的從節點發起故障轉移。 # 沒有簡單的方式可以直接準確判定從節點的”data age”,可以通過下面兩個方面的檢測實現: # 1) 如果有多個從節點可以發起故障轉移,可以讓他們交換資訊以選出資料狀態最節點主節點的從節點。從節點可以通過offset進行排名並通過該排名延遲發起故障轉移的時機。 # 2) 每個獨立的從節點計算最近一次與主節點互動的時間。這裡的互動可以是最近一次PING、最近一次接收到來自主節點的命令、與主節點斷開連線的時間(當複製連結已經down掉時)。如果最近一次與主節點的互動已經足夠久遠,那麼這個從節點將放棄進行故障轉移。 # 在2)中的時間閾值可以由使用者設定。特別地,當從節點的最近一次與主節點的互動遠大於(node-timeout * slave-validity-factor) + repl-ping-slave-period 時,這個從節點將不會執行故障轉移。 # 例如假設node-timeout為30秒,slave-validity-factor引數為10,repl-ping-slave-period 為10秒,當從節點距離最近一次與主節點的互動時間大於310秒(30*10+10)時,該從節點不能進行故障轉移。 # 一個過大的從節點有效因子(slave-validity-factor)會允許儲存過舊資料的從節點進行故障轉移,而一個過小的從節點有效因子將會妨礙叢集選擇從節點成為新的主節點。 # 所以合理的設定從節點有效因子很重要。 # 為了獲得最大的可用性,可以將從節點有效因子(slave-validity-factor)賦值為0。也就是說,從節點忽略距離最近一次與主節點互動的時間段,則是直接點嘗試發起故障轉移。(但是這種策略下,這些從節點仍會根據offset的排名來推遲發起故障轉移的時間) # 從節點有效因子(slave-validity-factor)值為0是唯一可以保證網路分割槽消失後,叢集仍繼續工作的值。 # 設定格式如下: # cluster-slave-validity-factor 10 # 5 從節點遷移遮蔽因子(cluster-migration-barrier) # Redis叢集支援將從節點遷移到孤立主節點(orphaned masters),沒有可以工作從節點的主節點)。該功能減少了叢集孤立主節點故障但沒有可工作從節點進行故障轉移的情況的發生。 # 從節點可以遷移到孤立主節點當且僅當原來的主節點的剩餘可工作從節點個數大於等於指定的可工作從節點數。這個數稱為從節點遷移遮蔽因子(migration barrier)。當遷移遮蔽因子設定為1時,當且僅當主節點擁有至少兩個可工作的從節點才允許其中從節點遷移到孤立主節點(orphaned masters)。該因子通常用來表明使用者需要為叢集中的主節點配置從節點個數。 # 預設遷移遮蔽因子是1(從節點可以執行遷移當前僅當其主節點在該節點遷移後仍保有至少一個從節點)。如果想關閉該功能,只需將該引數設定成一個極大值即可。 # 允許將遷移遮蔽因子置零。這種行為僅在除錯時有用,且在生產環境中存在極大風險。 # 配置格式如下: # cluster-migration-barrier 1 # 6 是否支援叢集部分可用 # 預設情況下,Redis叢集將停止接收客戶端請求(停止服務)當叢集檢測到存在雜湊槽沒有對應負責的節點。也就是說,如果叢集部分down(如有一部分雜湊槽沒有對應的節點),整個叢集最終將會不可用。(叢集資訊傳播遵循最終一致性) # 當所有的槽都再次有對應負責的節點後,叢集將會自動再次可用。 # 但是有時希望即使叢集只有部分槽有對應的節點,叢集也能繼續接受客戶端請求並處理對應的鍵空間。為了達到上述目的,將ecluster-require-full-coverage 設定為“no”即可。 # 配置格式如下: # cluster-require-full-coverage yes # 建立叢集的指導文件在http://redis.io 網站可以獲得。 # ############ # 慢日誌配置: ################################## SLOW LOG ################################### # # 1 命令執行超時上限 # Redis慢日誌系統用來記錄執行時間較長的查詢。這裡的執行時間(“execution time”)不包括IO操作時間,如接收客戶端的請求,返回請求結果等,而是實際執行命令的時間(此時執行緒處於阻塞狀態,僅能執行該命令,不能同時處理其他請求) # 可以使用兩個引數配置慢日誌:一個引數告知Redis執行時間超時閾值(單位是微秒,microseconds),這樣一旦某個執行時間超過指定上限,將會被記錄到慢日誌中;另一個引數是慢日誌的長度。慢日誌使用環式結構儲存超時命令。(當慢日誌滿後,新命令新增進去後,最老的命令將被踢出) # 單位是微秒(microsecond,106微秒等於1秒)。當該值為負數時表示禁用slow log功能。當該值為零時,表示強制使用slow log記錄每一條命令。 # 預設慢日誌功能是開啟的,slowlog-log-slower-than時間上限是104微秒。 slowlog-log-slower-than 10000 # 2 慢日誌長度 # slow log儲存在記憶體中,只要記憶體容量足夠,可以隨意設定慢日誌長度。可以使用SLOWLOG RESET命令重新設定慢日誌長度。 # 預設設定如下: slowlog-max-len 128 ############## # 延遲監測配置: ################################ LATENCY MONITOR ############################### # # 1 設定操作延遲判定上限 # Redis 延遲監測自系統通過對執行期間的操作的檢測來收集與延遲相關的資料。 # 通過使用LATENCY命令,Redis使用者可以獲得延遲相關的圖形、報告等資訊。 # 延遲系統只會記錄大於等於設定的latency-monitor-threshold值的操作。當該值為零時, # 則表明關閉latency monitor。 # # 預設情況下,latency monitor功能是關閉的,因為大多數場景下並不需要該功能。 # latency monitor可以在Redis執行時通過"CONFIG SET latency-monitor-threshold # <milliseconds>"啟動。 # latency monitor設定格式如下: latency-monitor-threshold 0 ############## # 事件通知配置: ############################# EVENT NOTIFICATION ############################## # # 1 設定事件通知 # Redis 可以通知那些已Pub/Sub客戶端鍵空間發生的事件。 # 該功能對應的文件是http://redis.io/topics/notifications # 例如,如果開啟鍵空間通知功能且一個客戶端對0號資料庫上的“foo”key執行DEL操作,那麼Redis將使用Pub/Sub傳送兩條訊息: # PUBLISH __keyspace@0__:foo del # PUBLISH __keyevent@0__:del foo # Redis對通知的事件進行了分類,每一類都使用唯一的字元標記: # 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 過期事件(過期鍵產生的事件) # e 驅逐事件(因maxmemory而驅逐的事件) # A g$lshzxe等型別的別稱(Alias),如此一來就可以使用"AKE"代表所有的事件型別 # notify-keyspace-events 可以指定多個字元組成的字串或空串。其中空串代表關閉通知功能。 # 例1:為了開啟List事件和Genetic事件(從事件名稱分類來說),可以使用如下設定: # notify-keyspace-events Elg # 例2:為了獲取過期鍵的資訊併發送到訂閱的頻道,即__keyevent@0__:expired use資訊,可設定如下: # notify-keyspace-events Ex # 預設情況下,事件通知功能是關閉的,因為大多數使用者並不需要這個功能且這個功能會帶來額外的效能開銷。 # 注意,如果沒有指定鍵空間(K)通知還是鍵事件(E)通知,那麼任何事件通知都不會被傳送。 # 預設設定如下: notify-keyspace-events "" ############ # 高階配置: ############################### ADVANCED CONFIG ############################### # # 1 Hash型別 # Hash資料型別的底層實現有壓縮連結串列(ziplist)和雜湊表(hash)。當且僅當儲存的資料量小於hash-max-ziplist-entries且節點佔用的容量小於hash-max-ziplist-value時才使用小資料量儲存高效的ziplist結構儲存。否則,使用雜湊結構儲存。 # 可以通過下述指令設定閾值: hash-max-ziplist-entries 512 hash-max-ziplist-value 64 # 2 List型別 # List型別也可以通過特殊的方式來節省空間。 # 每個內部list節點允許儲存的entries數量可以指定為已修訂最大數量或最大元素數。 # 如指定-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 # 整數代表每個list節點準確儲存指定數量的elements # 最高效的引數設定是-2 (8 Kb size) 或 -1 (4 Kb size) # 但是,如果需求很特殊,則應根據需要調整引數: list-max-ziplist-size -2 # 3 List型別壓縮深度設定 # List可以實現壓縮 # 壓縮深度是劃定quicklist、ziplist等list在壓縮時的節點範圍。為了進行快速的push/pop操作,不會對list的head和tail進行壓縮,只會對中間節點進行壓縮。引數設定如下: # 0: 關閉list壓縮功能 # 1: 深度為1表示只有當list新增一個節點(無論從head還是tail新增該節點)後才開始進行壓縮。 # 所以對於[head]->node->node->…->node->[tail] # 只有黑體部分加入才會執行壓縮操作。 # 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] # 設定格式如下: list-compress-depth 0 # 4 集合(intset)型別 # Set資料型別的底層實現預設是intSet,也可以是hash。 # Set使用hash編碼格式當且僅當字串組成的set變成底數為10的整數,且其值範圍在64位整數中。 # 下面的配置設定用來指定set可以使用特殊編碼格式的閾值: set-max-intset-entries 512 # 5 Sorted Set型別 # Sorted Set預設使用ziplist實現,也可通過skiplist編碼實現來節省空間。 # 當且僅當Sorted Set中元素值大於zset-max-ziplist-value、元素數量大於zset-max-ziplist-entries時,才使用skiplist實現Sorted Set。 # 引數設定如下: zset-max-ziplist-entries 128 zset-max-ziplist-value 64 # 6 HyperLogLog稀疏表示 # HyperLogLog稀疏表示閾值。16位的header部分也在limit中。當使用稀疏表示的HyperLogLog儲存的位元組超過了指定的閾值,它將轉變成稠密表示。 # 不建議使用大於16000的值。當小於16000時能夠獲得較高儲存效率。 # 建議的值是3000,該值可以在較少PFADD(在執行稀疏編碼時時間複雜度是O(N))操作執行的同時獲得極高空間使用收益。當CPU問題無需考慮時,可將該值提升到10000,但其值不應超過 15000。 # 設定方式如下: hll-sparse-max-bytes 3000 # 7 rehash處理 # 啟用的rehash會佔用每100毫秒的1 millisecond的CPU時間來對Redis hash table(儲存資料庫的鍵值對的hash table)執行rehash。在Redis中hash table使用惰性rehash:在rehashing時,hash table中執行的操作越多,rehash執行的步驟也越多。所以當server很空閒時,rehash將很簡單,hash table也會有更多的記憶體可以使用。 # 為了在條件許可的情況下對hash table進行rehash,從而節省記憶體空間,預設情況下,rehash功能會每100毫秒中1 毫秒被呼叫一次。 # 如果不確定: # 使用"activerehashing no" 如果當前應用環境很注重延遲、Redis僅允許2毫秒的延遲應答。 # 使用"activerehashing yes" 如果當前應用環境不是太注重延遲且想要儘可能塊的釋放記憶體空間。 # 預設該功能開啟: activerehashing yes # 8 客戶端輸出緩衝區 # 客戶端輸出緩衝區可以用來強制斷開那些不能夠快速讀取伺服器資料的客戶端連線。(如在Pub/Sub模式中,客戶端不能夠快速的處理publisher傳送過來的訊息) # 客戶端型別可以細分為三類: # normal -> 普通客戶端(包括MONITOR客戶端) # slave -> 從節點客戶端 # pubsub ->訂閱至少一個pubsub通道或模式的客戶端 # client-output-buffer-limit 設定的通用格式如下: # client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds> # 一旦hard limit達到,客戶端將直接斷開連線。如果soft limit 達到,客戶端連線將會持續soft seconds 後才斷開連線。 # 例如,當hard limit 是 32 MB(megabytes)、soft limit 在10 秒內持續超過16MB,如果客戶端輸出緩衝區(clients output buffer)超過32 MB 或客戶客戶端輸出緩衝區(clients output buffer)超過16MB,並在接下來的10秒都高於16MB,客戶端連線將馬上斷開。 # 預設情況下,不需對normal級別的clients進行約束因為這些客戶端如果沒有發起詢問就不會接受資料。所以,只需對非同步客戶端進行約束因為非同步客戶端會出現請求速度大於read速度的情況。 # 因為訂閱者和從節點使用推的方式接受資料,所以需要對pubsub 客戶端和slave客戶端設定預設的客戶端輸出緩衝區約束。 # 將hard limit 或 soft limit 置零表示關閉對應的功能。 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呼叫一個內部函式來執行後臺任務,如在timeout時關閉客戶端連線,清除從未被請求的過期鍵,等等。 # 雖然並不是所有的tasks都使用同樣的頻率執行,但是Redis會根據指定的頻率值來檢測tasks的執行。 # 預設設定的值為10,即每秒執行10次。在Redis處於空閒提升該值時,將會消耗更多的CPU。但是,提升該值也會使Redis更精確的處理超時問題,並檢測到更多的過期鍵。 # 該值設定範圍是1到500。但是不建議將其設定大於100。大多數的使用者建議使用預設的值(10),並根據應用環境的低延遲需求適當提升該值(峰值建議不要大於100)。 # 格式如下: hz 10 # 10 AOF重寫與磁碟同步 # 子程序在執行重寫AOF檔案時,如果啟動該功能,則資料每增長32MB就進行一次檔案磁碟同步。該功能對加快檔案同步到磁碟、避免大的延遲峰值有很大幫助。 # 預設該功能啟動。格式如下: aof-rewrite-incremental-fsync yes
好記性不如爛筆頭,大家一定要收藏起來以備不時之需