Redis3.2.6配置文件詳細中文說明

本文爲大家分享了Redis3.2.6配置文件詳細中文說明,非常詳細收藏起來以後工作有用

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

好記性不如爛筆頭,大家一定要收藏起來以備不時之需

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章