redis5.0.3配置文件詳解


Redis最新版本5.0.3配置文件詳解

 

單位

#當你需要為某個配置項指定內存大小的時候,必須要帶上單位,

#通常的格式就是 1k 5gb 4m 等:

#1k => 1000 bytes

#1kb => 1024 bytes

#1m => 1000000 bytes

#1mb => 10241024 bytes

#1g => 1000000000 bytes

#1gb => 10241024*1024 bytes

 

文件引入

#引入其他的配置文件

#include /path/to/local.conf

#include /path/to/other.conf

 

模塊加載

#啟動時加載模塊

#loadmodule /path/to/my_module.so

#loadmodule /path/to/other_module.so

 

網絡

#指定redis只能接受來自此IP綁定的網卡的請求,注意此默認值默認外網是不可訪問的

bind 127.0.0.1

 

#是否開啟保護模式。如果沒有指定bind和密碼,redis只會本地進行訪問,拒絕外部訪問。

protected-mode yes

 

#默認端口,建議生產環境不要使用默認端口避免被惡意掃描到

port 6379

 

#TCP連接中已完成隊列(完成三次握手之后)的長度

tcp-backlog 511

 

#配置unix socket來讓redis支持監聽本地連接。

#unixsocket /tmp/redis.sock

 

#配置unix socket使用文件的權限

#unixsocketperm 700

 

#客戶端連接空閑超過timeout將會被斷開,為0則斷開

timeout 0

 

#tcp keepalive參數

tcp-keepalive 300

 

基本配置

#是否后台啟動

daemonize no

 

#可以通過upstart和systemd管理Redis守護進程

#選項:

  • #supervised no - 沒有監督互動
  • #supervised upstart - 通過將Redis置於SIGSTOP模式來啟動信號
  • #supervised systemd - signal systemd將READY = 1寫入$ NOTIFY_SOCKET
  • #supervised auto - 檢測upstart或systemd方法基於 UPSTART_JOB或NOTIFY_SOCKET環境變量 supervised no

 

#配置PID文件路徑

pidfile /var/run/redis_6379.pid

 

#日志級別

#參數:

  • # debug
  • # verbose
  • # notice
  • # warning

loglevel notice

 

#日志文件

logfile “”

 

#是否打開記錄syslog功能

#syslog-enabled no

 

#syslog標識符

#syslog-ident redis

 

#日志的來源

#syslog-facility local0

 

#數據庫的數量,默認使用的數據庫是DB 0

#可以通過”SELECT “命令選擇一個db

#集群環境默認只有DB 0

databases 16

 

#是否一直顯示logo

always-show-logo yes

 

數據持久化RDB

#保存數據到磁盤:

#save

#Will save the DB if both the given number of seconds and the given #number of write operations against the DB occurred.

#In the example below the behaviour will be to save:

  • #15分鍾有一個key發生變化就保存數據到磁盤 #after 900 sec (15 min) if at least 1 key changed
  • #5分鍾有10個key發生變化就保存數據到磁盤 #after 300 sec (5 min) if at least 10 keys changed
  • #1分鍾有10000個key發生變化就保存數據到磁盤 #after 60 sec if at least 10000 keys changed

#Note: you can disable saving completely by commenting out all “save” lines.

#還可以刪除所有以前配置的保存。 #通過添加帶有單個空字符串參數的保存指令

#like in the following example:

save 900 1

save 300 10

save 60 10000

 

#持久化出現錯誤后,是否依然進行繼續進行工作

stop-writes-on-bgsave-error yes

 

#是否校驗rdb文件

rdbcompression yes

 

#使用壓縮rdb文件,rdb文件壓縮使用LZF壓縮算法,

rdbchecksum yes

 

#rdb文件名稱

dbfilename dump.rdb

 

#rdb使用上面的“dbfilename配置指令的文件名保存到這個目錄

dir ./

 

主從復制

#指定主節點。舊版本是:slaveof  新版本有區別

#replicaof

 

#master的密碼

#masterauth

 

#當一個slave失去和master的連接,或者同步正在進行中,slave的行為有兩種可能:

  • #如果 replica-serve-stale-data 設置為 “yes” (默認值),slave會繼續響應客戶端請求,可能是正常數據,也可能是還沒獲得值的空數據。
  • #如果 replica-serve-stale-data 設置為 “no”,slave會回復"正在從master同步(SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 命令。

replica-serve-stale-data yes

 

#配置從是否為只讀,開啟后從則不能寫入數據,舊版本是:slave-read-only yes

replica-read-only yes

 

#同步策略: 磁盤或socket,默認磁盤方式

repl-diskless-sync no

 

#如果非磁盤同步方式開啟,可以配置同步延遲時間,以等待master產生子進程通過socket傳輸RDB數據給slave。

#默認值為5秒,設置為0秒則每次傳輸無延遲。

repl-diskless-sync-delay 5

 

#slave根據指定的時間間隔向master發送ping請求。默認10秒。

#repl-ping-replica-period 10

 

#同步的超時時間

#slave在與master SYNC期間有大量數據傳輸,造成超時

  • #在slave角度,master超時,包括數據、ping等
  • #在master角度,slave超時,當master發送REPLCONF ACK pings
  • #確保這個值大於指定的repl-ping-slave-period,否則在主從間流量不高時每次都會檢測到超時

#repl-timeout 60

 

#是否在slave套接字發送SYNC之后禁用 TCP_NODELAY

  • #如果選擇yes,Redis將使用更少的TCP包和帶寬來向slaves發送數據。但是這將使數據傳輸到slave上有延遲,Linux內核的默認配置會達到40毫秒。
  • #如果選擇no,數據傳輸到salve的延遲將會減少但要使用更多的帶寬。
  • #默認我們會為低延遲做優化,但高流量情況或主從之間的跳數過多時,可以設置為“yes”。

repl-disable-tcp-nodelay no

 

#設置數據備份的backlog大小

#repl-backlog-size 1mb

 

#從最后一個slave斷開開始計時多少秒后,backlog緩沖將會釋放。

#repl-backlog-ttl 3600

 

#優先級

replica-priority 100

 

#如果master少於N個延時小於等於M秒的已連接slave,就可以停止接收寫操作。

#N個slave需要是“oneline”狀態。

#延時是以秒為單位,並且必須小於等於指定值,是從最后一個從slave接收到的ping(通常每秒發送)開始計數。

#該選項不保證N個slave正確同步寫操作,但是限制數據丟失的窗口期。

#例如至少需要3個延時小於等於10秒的slave用下面的指令:

#min-replicas-to-write 3

#min-replicas-max-lag 10

 

安全

#密碼

#requirepass foobared

 

#命令重命名

#設置命令為空時禁用命令

#rename-command CONFIG “”

 

限制

#設置最多同時連接的客戶端數量

#maxclients 10000

 

#內存限制

#maxmemory

 

#如果達到上方最大的內存限制,Redis如何選擇刪除key

  • #volatile-lru -> 根據LRU算法刪除設置過期時間的key
  • #allkeys-lru -> 根據LRU算法刪除任何key
  • #volatile-random -> 隨機移除設置過過期時間的key
  • #allkeys-random -> 隨機移除任何key
  • #volatile-ttl -> 移除即將過期的key(minor TTL)
  • #noeviction -> 不移除任何key,只返回一個寫錯誤

#注意:對所有策略來說,如果Redis找不到合適的可以刪除的key都會在寫操作時返回一個錯誤。

#目前為止涉及的命令: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

#maxmemory-policy noeviction

 

#LRU和最小TTL算法的樣本個數

#maxmemory-samples 5

 

懶刪除

#內存滿逐出

lazyfree-lazy-eviction no

 

 

#過期key刪除

lazyfree-lazy-expire no

 

#內部刪除,比如rename oldkey newkey時,如果newkey存在需要刪除newkey

lazyfree-lazy-server-del no

 

 

#接收完RDB文件后清空數據選項

replica-lazy-flush no

 

持久化方式AOF

#每次啟動時Redis都會先把這個文件的數據讀入內存里,先忽略RDB文件

appendonly no

 

#AOF文件名稱

appendfilename “appendonly.aof”

 

#fsync() 系統調用告訴操作系統把數據寫到磁盤上,而不是等更多的數據進入輸出緩沖區。

#有些操作系統會真的把數據馬上刷到磁盤上;有些則會盡快去嘗試這么做。

#Redis支持三種不同的模式:

  • #no:不要立刻刷,只有在操作系統需要刷的時候再刷。比較快。
  • #always:每次寫操作都立刻寫入到aof文件。慢,但是最安全。
  • #everysec:每秒寫一次。折中方案。

#默認的 “everysec” 通常來說能在速度和數據安全性之間取得比較好的平衡。

appendfsync everysec

 

#如果AOF的同步策略設置成 “always” 或者 “everysec”,並且后台的存儲進程(后台存儲或寫入AOF 日志)會產生很多磁盤I/O開銷。某些Linux的配置下會使Redis因為 fsync()系統調用而阻塞很久。

#注意,目前對這個情況還沒有完美修正,甚至不同線程的 fsync() 會阻塞我們同步的write(2)調用。

#為了緩解這個問題,可以用下面這個選項。它可以在 BGSAVE 或 BGREWRITEAOF 處理時阻止fsync()。

#這就意味着如果有子進程在進行保存操作,那么Redis就處於"不可同步"的狀態。

#這實際上是說,在最差的情況下可能會丟掉30秒鍾的日志數據。(默認Linux設定)

#如果把這個設置成"yes"帶來了延遲問題,就保持"no",這是保存持久數據的最安全的方式。

no-appendfsync-on-rewrite no

 

#自動重寫AOF文件。如果AOF日志文件增大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動重寫AOF日志文件。

#工作原理:Redis記住上次重寫時AOF文件的大小(如果重啟后還沒有寫操作,就直接用啟動時的AOF大小)

#這個基准大小和當前大小做比較。如果當前大小超過指定比例,就會觸發重寫操作。

#你還需要指定被重寫日志的最小尺寸,這樣避免了達到指定百分比但尺寸仍然很小的情況還要重寫。

#指定百分比為0會禁用AOF自動重寫特性。

auto-aof-rewrite-percentage 100

 

#文件達到大小閾值的時候進行重寫

auto-aof-rewrite-min-size 64mb

 

#如果設置為yes,如果一個因異常被截斷的AOF文件被redis啟動時加載進內存,redis將會發送日志通知用戶

#如果設置為no,erdis將會拒絕啟動。此時需要用"redis-check-aof"工具修復文件。

aof-load-truncated yes

 

#加載時Redis識別出AOF文件以“REDIS”開頭字符串,

#並加載帶此前綴的RDB文件,然后繼續加載AOF

aof-use-rdb-preamble yes

 

Lua腳本配置

#Lua 腳本的最大執行毫秒數

lua-time-limit 5000

 

集群

#開啟redis集群

#cluster-enabled yes

 

#配置redis自動生成的集群配置文件名。確保同一系統中運行的各redis實例該配置文件不要重名。

#cluster-config-file nodes-6379.conf

 

#集群節點超時毫秒數

#cluster-node-timeout 15000

 

#如果數據太舊,集群中的不可用master的slave節點會避免成為備用master。如果slave和master失聯時間超過:(node-timeout * slave-validity-factor) + repl-ping-slave-period則不會被提升為master。

#如node-timeout為30秒,slave-validity-factor為10, 默認default repl-ping-slave-period為10秒,失聯時間超過310秒slave就不會成為master。

#較大的slave-validity-factor值可能允許包含過舊數據的slave成為master,同時較小的值可能會阻止集群選舉出新master。

#為了達到最大限度的高可用性,可以設置為0,即slave不管和master失聯多久都可以提升為master

#cluster-replica-validity-factor 10

 

#只有在之前master有其它指定數量的工作狀態下的slave節點時,slave節點才能提升為master。默認為1(即該集群至少有3個節點,1 master+2 slaves,master宕機,仍有另外1個slave的情況下其中1個slave可以提升)

#測試環境可設置為0,生成環境中至少設置為1

#cluster-migration-barrier 1

 

#默認情況下如果redis集群如果檢測到至少有1個hash slot不可用,集群將停止查詢數據。

#如果所有slot恢復則集群自動恢復。

#如果需要集群部分可用情況下仍可提供查詢服務,設置為no。

#cluster-require-full-coverage yes

 

#選項設置為yes時,會阻止replicas嘗試對其master在主故障期間進行故障轉移

#然而,master仍然可以執行手動故障轉移,如果強制這樣做的話。

#cluster-replica-no-failover no

 

Docker集群配置

#默認情況下,Redis會自動檢測自己的IP和從配置中獲取綁定的PORT,告訴客戶端或者是其他節點。

#而在Docker環境中,如果使用的不是host網絡模式,在容器內部的IP和PORT都是隔離的,那么客戶端和其他節點無法通過節點公布的IP和PORT建立連接。

#如果開啟以下配置,Redis節點會將配置中的這些IP和PORT告知客戶端或其他節點。而這些IP和PORT是通過Docker轉發到容器內的臨時IP和PORT的。

#cluster-announce-ip #cluster-announce-port

 

#集群總線端口

#cluster-announce-bus-port

 

慢查詢日志

#記錄超過多少微秒的查詢命令 #1000000等於1秒,設置為0則記錄所有命令

slowlog-log-slower-than 10000

 

#記錄大小,可通過SLOWLOG RESET命令重置

slowlog-max-len 128

 

延時監控系統

#記錄執行時間大於或等於預定時間(毫秒)的操作,為0時不記錄

latency-monitor-threshold 0

 

事件通知

#Redis能通知 Pub/Sub 客戶端關於鍵空間發生的事件,默認關閉

notify-keyspace-events “”

 

內部數據結構

#當hash只有少量的entry時,並且最大的entry所占空間沒有超過指定的限制時,會用一種節省內存的

#數據結構來編碼。

可以通過下面的指令來設定限制

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

 

#當取正值的時候,表示按照數據項個數來限定每個quicklist節點上的ziplist長度。比如,當這個參數配置

#成5的時候,表示每個quicklist節點的ziplist最多包含5個數據項。

#當取負值的時候,表示按照占用字節數來限定每個quicklist節點上的ziplist長度。這時,它只能取-1到-5

#這五個值,每個值含義如下:

  • #-5: 每個quicklist節點上的ziplist大小不能超過64 Kb。(注:1kb => 1024 bytes)
  • #-4: 每個quicklist節點上的ziplist大小不能超過32 Kb。
  • #-3: 每個quicklist節點上的ziplist大小不能超過16 Kb。
  • #-2: 每個quicklist節點上的ziplist大小不能超過8 Kb。(-2是Redis給出的默認值)
  • #-1: 每個quicklist節點上的ziplist大小不能超過4 Kb。

list-max-ziplist-size -2

 

#這個參數表示一個quicklist兩端不被壓縮的節點個數。

#注:這里的節點個數是指quicklist雙向鏈表的節點個數,而不是指ziplist里面的數據項個數。

#實際上,一個quicklist節點上的ziplist,如果被壓縮,就是整體被壓縮的。

#參數list-compress-depth的取值含義如下:

  • #0: 是個特殊值,表示都不壓縮。這是Redis的默認值。
  • #1: 表示quicklist兩端各有1個節點不壓縮,中間的節點壓縮。
  • #2: 表示quicklist兩端各有2個節點不壓縮,中間的節點壓縮。
  • #3: 表示quicklist兩端各有3個節點不壓縮,中間的節點壓縮。

#依此類推… #由於0是個特殊值,很容易看出quicklist的頭節點和尾節點總是不被壓縮的,以便於在表的兩端進行快速存取。

list-compress-depth 0

 

#set有一種特殊編碼的情況:當set數據全是十進制64位有符號整型數字構成的字符串時。

#下面這個配置項就是用來設置set使用這種編碼來節省內存的最大長度。

set-max-intset-entries 512

 

#與hash和list相似,有序集合也可以用一種特別的編碼方式來節省大量空間。

#這種編碼只適合長度和元素都小於下面限制的有序集合

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

 

#HyperLogLog稀疏結構表示字節的限制。該限制包括

#16個字節的頭。當HyperLogLog使用稀疏結構表示 #這些限制,它會被轉換成密度表示。

#值大於16000是完全沒用的,因為在該點 #密集的表示是更多的內存效率。

#建議值是3000左右,以便具有的內存好處, 減少內存的消耗

hll-sparse-max-bytes 3000

 

#Streams宏節點最大大小/項目。流數據結構是基數編碼內部多個項目的大節點樹。使用此配置

#可以配置單個節點的字節數,以及切換到新節點之前可能包含的最大項目數

#追加新的流條目。如果以下任何設置設置為0,忽略限制,因此例如可以設置一個

#大入口限制將max-bytes設置為0,將max-entries設置為所需的值

stream-node-max-bytes 4096

stream-node-max-entries 100

 

#啟用哈希刷新,每100個CPU毫秒會拿出1個毫秒來刷新Redis的主哈希表(頂級鍵值映射表)

activerehashing yes

 

#客戶端的輸出緩沖區的限制,可用於強制斷開那些因為某種原因從服務器讀取數據的速度不夠快的客戶端

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

 

#客戶端查詢緩沖區累積新命令。它們僅限於固定的默認情況下,

#多數情況下為了避免協議不同步導致客戶端查詢緩沖區中未綁定的內存使用量的錯誤

#但是,如果你有使用的話,你可以在這里配置它,比如我們有很多執行請求或類似的。

#client-query-buffer-limit 1gb

 

#在Redis協議中,批量請求,即表示單個的元素strings,通常限制為512 MB。

#但是,您可以z更改此限制

#proto-max-bulk-len 512mb

 

#默認情況下,“hz”的被設定為10。提高該值將在Redis空閑時使用更多的CPU時,但同時當有多個key

#同時到期會使Redis的反應更靈敏,以及超時可以更精確地處理

hz 10

 

#開啟動態hz

dynamic-hz yes

 

#當一個子進程重寫AOF文件時,如果啟用下面的選項,則文件每生成32M數據會被同步

aof-rewrite-incremental-fsync yes

 

#當redis保存RDB文件時,如果啟用了以下選項,每生成32 MB數據,文件將被fsync-ed。

#這很有用,以便以遞增方式將文件提交到磁盤並避免大延遲峰值。

rdb-save-incremental-fsync yes

 

碎片整理

#啟用主動碎片整理

#activedefrag yes

 

#啟動活動碎片整理的最小碎片浪費量

#active-defrag-ignore-bytes 100mb

 

#啟動碎片整理的最小碎片百分比

#active-defrag-threshold-lower 10

 

#使用最大消耗時的最大碎片百分比

#active-defrag-threshold-upper 100

 

#在CPU百分比中進行碎片整理的最小消耗

#active-defrag-cycle-min 5

 

#磁盤碎片整理的最大消耗

#active-defrag-cycle-max 75

 

#將從主字典掃描處理的最大set / hash / zset / list字段數

#active-defrag-max-scan-fields 1000


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM