Redis實戰(zhàn)-Redis配置(三)

在學習Redis配置之前我們首先打開Redis客戶端,然后輸入命令:

config get *

獲取當前redis配置的所有信息,如下圖所示:

127.0.0.1:6379> config get *
  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) "test"
  5) "masterauth"
  6) ""
  7) "unixsocket"
  8) ""
  9) "logfile"
 10) ""
 11) "pidfile"
 12) "/var/run/redis.pid"
 13) "maxmemory"
 14) "0"
 15) "maxmemory-samples"
 16) "5"
 17) "timeout"
 18) "0"
 19) "tcp-keepalive"
 20) "0"
 21) "auto-aof-rewrite-percentage"
 22) "100"
 23) "auto-aof-rewrite-min-size"
 24) "67108864"
 25) "hash-max-ziplist-entries"
 26) "512"
 27) "hash-max-ziplist-value"
 28) "64"
 29) "list-max-ziplist-entries"
 30) "512"
 31) "list-max-ziplist-value"
 32) "64"
 33) "set-max-intset-entries"
 34) "512"
 35) "zset-max-ziplist-entries"
 36) "128"
 37) "zset-max-ziplist-value"
 38) "64"
 39) "hll-sparse-max-bytes"
 40) "3000"
 41) "lua-time-limit"
 42) "5000"
 43) "slowlog-log-slower-than"
 44) "10000"
 45) "latency-monitor-threshold"
 46) "0"
 47) "slowlog-max-len"
 48) "128"
 49) "port"
 50) "6379"
 51) "tcp-backlog"
 52) "511"
 53) "databases"
 54) "16"
 55) "repl-ping-slave-period"
 56) "10"
 57) "repl-timeout"
 58) "60"
 59) "repl-backlog-size"
 60) "1048576"
 61) "repl-backlog-ttl"
 62) "3600"
 63) "maxclients"
 64) "10000"
 65) "watchdog-period"
 66) "0"
 67) "slave-priority"
 68) "100"
 69) "min-slaves-to-write"
 70) "0"
 71) "min-slaves-max-lag"
 72) "10"
 73) "hz"
 74) "10"
 75) "cluster-node-timeout"
 76) "15000"
 77) "cluster-migration-barrier"
 78) "1"
 79) "cluster-slave-validity-factor"
 80) "10"
 81) "repl-diskless-sync-delay"
 82) "5"
 83) "cluster-require-full-coverage"
 84) "yes"
 85) "no-appendfsync-on-rewrite"
 86) "no"
 87) "slave-serve-stale-data"
 88) "yes"
 89) "slave-read-only"
 90) "yes"
 91) "stop-writes-on-bgsave-error"
 92) "yes"
 93) "daemonize"
 94) "yes"
 95) "rdbcompression"
 96) "yes"
 97) "rdbchecksum"
 98) "yes"
 99) "activerehashing"
100) "yes"
101) "repl-disable-tcp-nodelay"
102) "no"
103) "repl-diskless-sync"
104) "no"
105) "aof-rewrite-incremental-fsync"
106) "yes"
107) "aof-load-truncated"
108) "yes"
109) "appendonly"
110) "no"
111) "dir"
112) "G:\\developTool\\Redis"
113) "maxmemory-policy"
114) "noeviction"
115) "appendfsync"
116) "everysec"
117) "save"
118) "jd 900 jd 300 jd 60"
119) "loglevel"
120) "notice"
121) "client-output-buffer-limit"
122) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
123) "unixsocketperm"
124) "0"
125) "slaveof"
126) ""
127) "notify-keyspace-events"
128) ""
129) "bind"
130) ""
127.0.0.1:6379>

上述即為Redis的所有配置信息,乍一看雜亂無章,其實我們可以打開Redis安裝路徑下的redis.windows.conf進行學習,Redis的配置大致可以分為一下幾類:

  • 引入-1(includes)
  • 通用-12 (general)
  • 快照-6 (snapshotting)
  • 復(fù)制-14 (replication)
  • 安全-1 (security)
  • 限制-3 (limits)
  • 追加模式-5(append only mode)
  • LUA腳本-1(lua scripting)
  • Redis 集群-6 (redis cluster)
  • 慢日志-2(slow log)
  • 延遲監(jiān)控-1(latency monitor)
  • 事件通知-1(event notification)
  • 高級配置-15(advanced config)

引入

可以將公共的配置放入到一個公共的配置文件中,然后通過子配置文件引入父配置

#下面的命令表示引入配置文件
 include /path/to/local.conf
 include /path/to/other.conf

舉例說明:
當前我的redis安裝目錄下有一個redis.config,現(xiàn)在將這個配置文件復(fù)制一份出去:

[hand@localhost redis-2.8.17]$ cp redis.conf /home/hand/opt/redis-include.conf
#然后修改redis-include.conf中的守護進程daemonize 為yes
[hand@localhost opt]$ vi redis-include.conf
daemonize yes
#然后將原始的redis.conf中的daemonize no注釋掉,同時引入redis-include.conf
[hand@localhost redis-2.8.17]$ vi redis.conf
#daemonize no
include /home/hand/opt/redis-include.conf
#保存之后,啟動redis服務(wù),同時指定配置文件redis.conf
./redis-server ../redis.conf
#然后開一個窗口打開redis客戶端,獲取daemonize信息
./redis-cli
127.0.0.1:6379> config get daemonize
1) "daemonize"
2) "yes"
127.0.0.1:6379> 

發(fā)現(xiàn)daemonize的屬性值已經(jīng)被修改過了,說明咱們在redis.conf 中引入的redis-include.conf生效了。
注意:一般引入的文件在配置文件的最頂部,因此如果想讓自己引入的配置文件【redis-include.conf】中的屬性生效,要么在父文件【redis.conf】中不出現(xiàn)子文件中已經(jīng)修改的配置信息或者注釋掉。要么就放在父配置文件的最底部。否則的話子文件中修改了的屬性值,在啟動的過程中又會被父文件中的值覆蓋掉。--這個很關(guān)鍵

通用

1.daemonize:如果值是“yes”,則啟動服務(wù)的時候是后臺守護進程形式,如果值是“no”,則相反

daemonize yes

2.port:指定端口

port 6379

3.tcp-backlog:此參數(shù)確定了TCP連接中已完成隊列(完成三次握手之后)的長度,當然此值必須不大于Linux系統(tǒng)定義的/proc/sys/net/core/somaxconn值,默認是511,而Linux的默認參數(shù)值是128。當系統(tǒng)并發(fā)量大并且客戶端速度緩慢的時候,可以將這二個參數(shù)一起參考設(shè)定。一般取的是min(backlog,somaxconn)中較小的值,因此在高并發(fā)的場景下可以將somaxconn在配置文件中改大一些。

tcp-backlog 511

4.bind:綁定主機地址

# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1

5.unixsocket 支持不監(jiān)聽端口,也能與外界進行通信,可以通過unixsocket配置項來指定unix socket文件的路徑,并通過unixsocketperm來指定文件的權(quán)限。

unixsocket /tmp/redis.sock
unixsocketperm 700**

6.timeout 表示客戶端閑置多長時間后關(guān)閉連接,如果指定為0,表示關(guān)閉該功能

timeout 0

7.tcp-keepalive tcp心跳檢測,指定的值(以秒為單位)是用于發(fā)送ack的周期,用來檢測在特定時長的時間內(nèi)客戶端是否存在響應(yīng),如果無響應(yīng)則關(guān)閉當前連接,注意:要關(guān)閉連接,一般需要雙倍的時間。如果值為0,則表示不會進行檢測

tcp-keepalive 0

8.loglevel:Redis總共支持四個級別:debug、verbose、notice、warning。

Debug:記錄很多信息,用于開發(fā)和測試;

Varbose:有用的信息,不像debug會記錄那么多;

Notice:普通的verbose,常用于生產(chǎn)環(huán)境;

Warning:只有非常重要或者嚴重的信息會記錄到日志;

默認是notice級別。
9.logfile 日志記錄方式,默認為標準輸出,如果配置Redis為守護進程方式運行,而這里又配置為日志記錄方式為標準輸出,則日志將會發(fā)送給/dev/null

logfile stdout

在windows的配置文件中我們可以看到默認的配置為:

logfile ""

我們可以手動更改日志的輸出文件為:

logfile "G:/developTool/Redis/log/redis.log"

10.syslog-enabled:要啟用日志記錄到Windows EventLog,只需將'syslog-enabled'設(shè)置為yes,并可選擇更新其他syslog參數(shù)以滿足您的需求。如果Redis已安裝并作為Windows服務(wù)啟動,則會執(zhí)行此操作自動啟用。這個時候當我們啟動redis-server.exe的時候不會看到日志了,所有的日志都會記錄到上述的redis.log文件中。

syslog-enabled yes

11.syslog-ident:在Windows應(yīng)用程序日志中指定事件的源名稱。

syslog-ident redis

12.databases:設(shè)置數(shù)據(jù)庫的數(shù)量,默認數(shù)據(jù)庫為0,可以使用SELECT <dbid>命令在連接上指定數(shù)據(jù)庫id

databases 16

快照

1.save:指定在多長時間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件,可以多個條件配合,比如save 300 10表示:300秒內(nèi)至少有300個key被改變時,觸發(fā)保存信息到磁盤的事件。

save 900 1
save 300 10
save 60 10000

2.stop-writes-on-bgsave-error:當持久化出現(xiàn)錯誤之后,是否繼續(xù)提供寫服務(wù)rdbcompression :指定存儲至本地數(shù)據(jù)庫時是否壓縮數(shù)據(jù),默認為yes,Redis采用LZF壓縮,如果為了節(jié)省CPU時間,可以關(guān)閉該選項,但會導致數(shù)據(jù)庫文件變的巨大

stop-writes-on-bgsave-error yes

3.rdbcompression:指定存儲至本地數(shù)據(jù)庫時是否壓縮數(shù)據(jù),默認為yes,Redis采用LZF壓縮,如果為了節(jié)省CPU時間,可以關(guān)閉該選項,但會導致數(shù)據(jù)庫文件變的巨大

rdbcompression yes

4.dbfilename 指定本地數(shù)據(jù)庫文件名,默認值為dump.rdb

 dbfilename dump.rdb

5.rdbchecksum:讀取和寫入的時候是否支持CRC64校驗,默認是開啟的
讀取和寫入的時候是否支持CRC64校驗,默認是開啟的

rdbchecksum yes

6.dir:指定本地數(shù)據(jù)庫存放目錄

dir ./

復(fù)制

1.slaveof:設(shè)置當本機為slav服務(wù)時,設(shè)置master服務(wù)的IP地址及端口,在Redis啟動時,它會自動從master進行數(shù)據(jù)同步

slaveof <masterip> <masterport>
如上命令所示,我們可以獲取master中主服務(wù)的數(shù)據(jù),配置為
slaveof 192.168.1.196 6379

2.masterauth 當master服務(wù)設(shè)置了密碼保護時,slav服務(wù)連接master的密碼

 masterauth <master-password>

3.slave-serve-stale-data:當slave服務(wù)器和master服務(wù)器失去連接后,或者當數(shù)據(jù)正在復(fù)制傳輸?shù)臅r候,如果此參數(shù)值設(shè)置“yes”,slave服務(wù)器可以繼續(xù)接受客戶端的請求,否則,會返回給請求的客戶端如下信息“SYNC with master in progress”

slave-serve-stale-data yes

4.slave-read-only:是否允許slave服務(wù)器節(jié)點只提供讀服務(wù)

slave-read-only yes

5.repl-diskless-sync:
官方解釋:復(fù)制同步策略:硬盤或者套接字,當前的硬盤復(fù)制處于一個實驗階段,新的slave和重新連接無法復(fù)制的slave,進程只是接收差異需要做一個完全的同步,RDB文件從主服務(wù)器傳輸?shù)綇姆?wù)器。傳輸可以通過兩種不同的方式進行:

  • 磁盤支持:Redis主服務(wù)器創(chuàng)建一個新進程用來寫RDB文件到
    磁盤上。稍后該文件由父進程傳輸逐步增加子進程。
  • 無盤:Redis主機創(chuàng)建一個直接寫入的新進程RDB文件到從套接字,根本沒有觸及磁盤。

*使用磁盤支持的復(fù)制,在生成RDB文件時,會有更多的slave服務(wù)器
可以在當前進程生成后立即對RDB文件進行排隊并提供RDB文件完成其工作。 使用無盤復(fù)制而不是一次轉(zhuǎn)移開始,新的進程到達將排隊和新的轉(zhuǎn)移,將在當前終止時啟動。

*使用無盤復(fù)制時,主機等待可配置的數(shù)量希望多個紫禁城開始轉(zhuǎn)移之前的時間(以秒為單位)將到達并且轉(zhuǎn)移可以并行化。

使用慢速磁盤和快速(大帶寬)網(wǎng)絡(luò),無盤復(fù)制效果會更好。

#表示不開啟磁盤復(fù)制
repl-diskless-sync no  

6.repl-diskless-sync-delay:啟用無磁盤復(fù)制后,可以配置延遲
用來服務(wù)器等待其他slave服務(wù)器以產(chǎn)生通過套接字傳遞RDB的子節(jié)點。
這很重要,因為一旦轉(zhuǎn)移開始,就無法提供服務(wù),新的slave服務(wù)器到達,將排隊等待下一次RDB轉(zhuǎn)移,所以服務(wù)器等待延遲,以便讓更多的slave服務(wù)器到達。
延遲以秒為單位指定,默認為5秒。 要禁用它只要設(shè)置為0秒,傳輸將盡快開始。

repl-diskless-sync-delay 5

7.repl-ping-slave-period: slave服務(wù)器使用預(yù)定義的時間向主服務(wù)器發(fā)送請求連接,這個值是可以配置的,默認為10秒。

repl-ping-slave-period 10

8.repl-timeout: 設(shè)置復(fù)制超時時間,

repl-timeout 60

9.repl-disable-tcp-nodelay:指定向slave同步數(shù)據(jù)時,是否禁用socket的NO_DELAY選 項。若配置為“yes”,則禁用NO_DELAY,則TCP協(xié)議棧會合并小包統(tǒng)一發(fā)送,這樣可以減少主從節(jié)點間的包數(shù)量并節(jié)省帶寬,但會增加數(shù)據(jù)同步到 slave的時間。若配置為“no”,表明啟用NO_DELAY,則TCP協(xié)議棧不會延遲小包的發(fā)送時機,這樣數(shù)據(jù)同步的延時會減少,但需要更大的帶寬。 通常情況下,應(yīng)該配置為no以降低同步延時,但在主從節(jié)點間網(wǎng)絡(luò)負載已經(jīng)很高的情況下,可以配置為yes。

repl-disable-tcp-nodelay no

10.repl-backlog-size :設(shè)置slave服務(wù)器復(fù)制時候積壓的緩沖區(qū),當從服務(wù)器在某一時間斷開連接,重新連接的時候,只需要部分同步即可,只要傳遞同步丟失的部分數(shù)據(jù),注意了,至少有一個slave服務(wù)器才會設(shè)置擠壓內(nèi)存。

repl-backlog-size 1mb

11.repl-backlog-ttl: 當master服務(wù)器與slave服務(wù)器斷開的一段時間內(nèi)釋放待辦事項緩沖區(qū),單位為秒,當值為0的時候,表示不會釋放積壓。

repl-backlog-ttl  3600

12.slave-priority:指定slave的優(yōu)先級。在不只1個slave存在的部署環(huán)境下,當master宕機時,Redis Sentinel會將priority值最小的slave提升為master。需要注意的是,若該配置項為0,則對應(yīng)的slave永遠不會自動提升為master。

slave-priority 100

13.min-slaves-to-write 3 表示當slave服務(wù)器有3個連接不上的時候,master服務(wù)器將會拒絕之后的連接,當值為0的時候為禁用該功能。
14.min-slaves-max-lag 10 表示連接master服務(wù)器的超時時間為10秒。

安全

1.requirepass 設(shè)置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼,默認關(guān)閉,上述所示我們的redis密碼顯示為空。

PS:如果我們想修改redis的密碼,有兩種方式:

①修改配置文件的requiress參數(shù),該修改方法需要重啟redis服務(wù)

  • 查看當前密碼:
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379>
  • 修改配置文件requirepass password ,注意我的redis配置文件是 redis.windows.config這個在上一節(jié)中配置redis為服務(wù)的時候提及過。【注意修改的時候注釋和命令行都必須頂格,否則會報錯】

  • 重啟服務(wù)后查詢密碼:

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "password"
127.0.0.1:6379>

②在客戶端的命令行中修改,該方法修改是暫時的,當redis服務(wù)重啟的時候密碼無效

  • 修改密碼為test,然后查詢,發(fā)現(xiàn)密碼已經(jīng)修改成功了。
127.0.0.1:6379> config set requirepass test
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test"
127.0.0.1:6379>

限制

1.maxclients:設(shè)置同一時間最大客戶端連接數(shù),默認無限制,Redis可以同時打開的客戶端連接數(shù)為Redis進程可以打開的最大文件描述符數(shù),
如果設(shè)置 maxclients 0,表示不作限制。當客戶端連接數(shù)到達限制時,Redis會關(guān)閉新的連接并向客戶端返回max number of clients reached錯誤信息

maxclients 10000

2.maxmemory 指定Redis最大內(nèi)存限制,Redis在啟動時會把數(shù)據(jù)加載到內(nèi)存中,達到最大內(nèi)存后,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理 后,仍然到達最大內(nèi)存設(shè)置,將無法再進行寫入操作,但仍然可以進行讀取操作。

maxmemory <bytes>

3.maxmemory-samples 指的是每次進行淘汰的時候 會隨機抽取5個key 從里面淘汰最不經(jīng)常使用的(默認選項)

maxmemory-samples 5

追加模式

1.appendonly:指定是否在每次更新操作后進行日志記錄,Redis在默認情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟,可能會在斷電時導致一段時間內(nèi)的數(shù)據(jù)丟失。因為 redis本身同步數(shù)據(jù)文件是按上面save條件來同步的,所以有的數(shù)據(jù)會在一段時間內(nèi)只存在于內(nèi)存中。默認為no

appendonly no

2.appendfilename:指定更新日志文件名,默認為appendonly.aof

appendfilename "appendonly.aof"

3.appendfsync:指定更新日志條件,共有3個可選值:
no:表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤(快)
always:表示每次更新操作后手動調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢,安全)
everysec:表示每秒同步一次(折中,默認值)

appendfsync always
appendfsync everysec
appendfsync no

4.no-appendfsync-on-rewrite:指定是否在后臺aof文件rewrite期間調(diào)用fsync,默認為no,表示要調(diào)用fsync(無論后臺是否有子進程在刷盤)。Redis在后臺寫RDB文件或重寫afo文件期間會存在大量磁盤IO,此時,在某些linux系統(tǒng)中,調(diào)用fsync可能會阻塞。

no-appendfsync-on-rewrite no

5.auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size
rewrite機制,aof存放了所有redis的操作指令,當aof文件達到auto_aof_rewrite_base_size基準值的時候,就會自動出發(fā)rewrite,
auto-aof-rewrite-percentage 100 表示:當前寫入日志文件的大小超過上一次rewrite之后的文件大小的百分之100時就是2倍時觸發(fā)rewrite,
rewrite之后aof文件會保存keys的最后的狀態(tài),清除掉之前冗余的,來縮小這個文件,把它設(shè)置為0可以禁用自動觸發(fā)的功能。

#當前寫入為上次文件大小的100%時觸發(fā)
auto-aof-rewrite-percentage 100 
#當值為0的時候,表示禁用自動觸發(fā)該功能
auto-aof-rewrite-percentage 0

auto_aofrewrite_min_size: 當前aof文件大于多少字節(jié)后才觸發(fā)。避免在aof很小的時候就觸發(fā)了。默認大小為64mb。

LUA腳本

1.lua-time-limit:一個Lua腳本最長的執(zhí)行時間,單位為毫秒,如果為0或負數(shù)表示無限執(zhí)行時間,默認為5000

lua-time-limit 5000

Redis集群

1.cluster-enabled:是否啟用集群功能,如果配置yes則開啟集群功能,此redis實例作為集群的一個節(jié)點,否則,它是一個普通的單一的redis實例

cluster-enabled yes

2.cluster-config-file :集群配置文件,此配置文件不能人為的手動維護,它是集群節(jié)點自動維護的文件,主要用于記錄集群中有哪些節(jié)點、他們的狀態(tài)以及一些持久化參數(shù)等,方便在重啟時恢復(fù)這些狀態(tài)。通常是在收到請求之后這個文件就會被更新。

cluster-config-file nodes-6379.conf

3.cluster-node-timeout:表示集群中的節(jié)點能夠失聯(lián)的最大時間,超過這個時間,該節(jié)點就會被認為故障。如果主節(jié)點超過這個時間還是不能連接,則用它的其他節(jié)點將啟動故障遷移,升級成主節(jié)點。注意,任何一個節(jié)點在這個時間之內(nèi)如果還是沒有連上大部分的主節(jié)點,則此節(jié)點將停止接收任何請求,單位是毫秒。

#默認為15秒
cluster-node-timeout 15000

4.cluster-slave-validity-factor:如果設(shè)置成0,則無論從節(jié)點與主節(jié)點失聯(lián)多久,從節(jié)點都會嘗試升級成主節(jié)點。如果設(shè)置成正數(shù),則cluster-node-timeout乘以cluster-slave-validity-factor得到的時間,是從節(jié)點與主節(jié)點失聯(lián)后,此從節(jié)點數(shù)據(jù)有效的最長時間,超過這個時間,從節(jié)點不會啟動故障遷移。假設(shè)cluster-node-timeout=5,cluster-slave-validity-factor=10,則如果從節(jié)點跟主節(jié)點失聯(lián)超過50秒,此從節(jié)點不能成為主節(jié)點。注意,如果此參數(shù)配置為非0,將可能出現(xiàn)由于某主節(jié)點失聯(lián)卻沒有從節(jié)點能頂上的情況,從而導致集群不能正常工作,在這種情況下,只有等到原來的主節(jié)點重新回歸到集群,集群才恢復(fù)運作。

cluster-slave-validity-factor 10

5.cluster-migration-barrier:主節(jié)點需要的最小從節(jié)點數(shù),只有達到這個數(shù),主節(jié)點失敗時,它從節(jié)點才會進行遷移。

cluster-migration-barrier 1

6.cluster-require-full-coverage:在部分key所在的節(jié)點不可用時,如果此參數(shù)設(shè)置為"yes"(默認值), 則整個集群停止接受操作;如果此參數(shù)設(shè)置為”no”,則集群依然為可達節(jié)點上的key提供讀操作。

cluster-require-full-coverage yes

慢日志

Slow log 是 Redis 用來記錄查詢執(zhí)行時間的日志系統(tǒng)。查詢執(zhí)行時間指的是不包括像客戶端響應(yīng)(talking)、發(fā)送回復(fù)等 IO 操作,而單單是執(zhí)行一個查詢命令所耗費的時間。
慢日志包括兩個屬性:一個是slowlog-log-slower-than:它表示決定要對執(zhí)行時間大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查詢進行記錄。另一個是slowlog-max-len:它決定 slow log 最多能保存多少條日志, slow log 本身是一個 FIFO 隊列,當隊列大小超過 slowlog-max-len 時,最舊的一條日志將被刪除,而最新的一條日志加入到 slow log ,以此類推。

#表示慢日志會記錄查詢時間大于10000微秒的查詢
slowlog-log-slower-than 10000
#表示慢日志能記錄的最大條數(shù)為128
slowlog-max-len 128

另外,slow log 保存在內(nèi)存里面,讀寫速度非常快,因此你可以放心地使用它,不必擔心因為開啟 slow log 而損害 Redis 的速度。

延遲監(jiān)控

latency-monitor-threshold:這個參數(shù)項用來設(shè)置操作時間的閥值,如果關(guān)閉延遲監(jiān)控功能的話,可以將這個值設(shè)置為0。

latency-monitor-threshold 0

LATENCY監(jiān)控器功能,是從Redis Version 2.8.3開始提供的一個重要的反映其延遲狀態(tài)的監(jiān)控功能。其工作任務(wù)是當技術(shù)人員設(shè)置了一個延遲操作的時間閥值后,凡是超過了這個閥值時間的操作都將被認為是執(zhí)行緩慢的操作被記錄下來。Redis客戶端在登錄后,可以使用諸如LATENCY LATEST、LATENCY HISTORY、LATENCY RESET、LATENCY GRAPH、LATENCY DOCTOR等命令控制/查詢LATENCY監(jiān)控器。
下面就用LATENCY的各種子命令來查看延遲記錄:

LATENCY LATEST命令報告記錄的最新延遲事件。 每個活動都有以下字段:

  • 活動名稱。
  • 事件的最新延遲峰值的Unix時間戳。
  • 最新事件延遲(毫秒)。
  • 此事件的所有時間最長延遲。
    1.LATENCY LATEST 最新延遲顯示
127.0.0.1:6379> debug sleep 1
OK
(1.00s)
127.0.0.1:6379> debug sleep .25
OK
127.0.0.1:6379> latency latest
(empty list or set)
127.0.0.1:6379> config set latency-monitor-threshold 100
OK
127.0.0.1:6379> debug sleep 1
OK
(1.00s)
127.0.0.1:6379> debug sleep .25
OK
127.0.0.1:6379> latency latest
1) 1) "command"
   2) (integer) 1555912857
   3) (integer) 250
   4) (integer) 1000
127.0.0.1:6379>

2.LATENCY HISTORY:歷史延遲顯示

127.0.0.1:6379> latency history command
1) 1) (integer) 1555912853
   2) (integer) 1000
2) 1) (integer) 1555912857
   2) (integer) 250

3.LATENCY RESET:清除延遲記錄
如果不帶參數(shù)調(diào)用,LATENCY RESET命令將重置所有事件,丟棄當前記錄的延遲峰值事件,并重置最大事件時間寄存器。
通過提供事件名稱作為參數(shù),可以僅重置特定事件。 該命令返回在命令執(zhí)行期間重置的事件時間序列的數(shù)量。

127.0.0.1:6379> latency reset command
(integer) 1
127.0.0.1:6379>

4.LATENCY GRAPH:延遲圖,以圖形化的方式顯示。最下面以豎行顯示的是指延遲在多久以前發(fā)生。

127.0.0.1:6379> debug sleep .1
OK
127.0.0.1:6379> debug sleep .2
OK
127.0.0.1:6379> debug sleep .3
OK
127.0.0.1:6379> debug sleep .4
OK
127.0.0.1:6379> debug sleep .5
OK
(0.50s)
127.0.0.1:6379> latency graph command
command - high 500 ms, low 100 ms (all time high 500 ms)
--------------------------------------------------------------------------------
   _#
  _||
 _|||
_||||

15554
m8624
 ssss
127.0.0.1:6379>

事件通知

1.keyspace notification:鍵空間通知使得客戶端可以通過訂閱頻道或模式, 來接收那些以某種方式改動了 Redis 數(shù)據(jù)集的事件。這一塊可以參考:http://redisdoc.com/topic/notification.html
對于每個修改數(shù)據(jù)庫的操作,鍵空間通知都會發(fā)送兩種不同類型的事件。
比如說,對 0 號數(shù)據(jù)庫的鍵 foo 執(zhí)行命令時, 系統(tǒng)將分發(fā)兩條消息, 相當于執(zhí)行以下兩個命令:

 PUBLISH __keyspace@0__:foo del
 PUBLISH __keyevent@0__:del foo

訂閱第一個頻道 __keyspace@0__:foo 可以接收 0 號數(shù)據(jù)庫中所有修改鍵 foo 的事件, 而訂閱第二個頻道 __keyevent@0__:del 則可以接收 0 號數(shù)據(jù)庫中所有執(zhí)行 del 命令的鍵。

keyspace 為前綴的頻道被稱為鍵空間通知(key-space notification), 而以 keyevent 為前綴的頻道則被稱為鍵事件通知(key-event notification)。

del mykey 命令執(zhí)行時:

  • 鍵空間頻道的訂閱者將接收到被執(zhí)行的事件的名字,在這個例子中,就是 del 。
  • 鍵事件頻道的訂閱者將接收到被執(zhí)行事件的鍵的名字,在這個例子中,就是 mykey 。
    2.notify-keyspace-events :
  • 當 notify-keyspace-events 選項的參數(shù)為空字符串時,功能關(guān)閉。
  • 另一方面,當參數(shù)不是空字符串時,功能開啟。
    notify-keyspace-events 的參數(shù)可以是以下字符的任意組合, 它指定了服務(wù)器該發(fā)送哪些類型的通知:
字符 發(fā)送的通知
K 鍵空間通知,所有通知以 keyspace@<db> 為前綴
E 鍵事件通知,所有通知以 keyevent@<db> 為前綴
g DEL 、 EXPIRE 、 RENAME 等類型無關(guān)的通用命令的通知
$ 字符串命令的通知
l 列表命令的通知
s 集合命令的通知
h 哈希命令的通知
z 有序集合命令的通知
x 過期事件:每當有過期鍵被刪除時發(fā)送
e 驅(qū)逐(evict)事件:每當有鍵因為 maxmemory 政策而被刪除時發(fā)送
A 參數(shù) g$lshzxe 的別名

默認值

notify-keyspace-events ""
#當值為Ex的時候表示開啟鍵事件通知,每當有過期鍵被刪除時發(fā)送
notify-keyspace-events Ex

高級配置

1.指定在超過一定的數(shù)量或者最大的元素超過某一臨界值時,采用一種特殊的哈希算法

hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
  1. 指定是否激活重置哈希,默認為開啟
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

3.hll-sparse-max-bytes: HyperLogLog稀疏結(jié)構(gòu)表示字節(jié)的限制。該限制包括
16個字節(jié)的頭。當HyperLogLog使用稀疏結(jié)構(gòu)表示
這些限制,它會被轉(zhuǎn)換成密度表示。
值大于16000是完全沒用的,因為在該點
密集的表示是更多的內(nèi)存效率。
建議值是3000左右,以便具有的內(nèi)存好處, 減少內(nèi)存的消耗

hll-sparse-max-bytes 3000

4.activerehashing
Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低內(nèi)存的使用 當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。如果沒有這么嚴格的實時性要求,可以設(shè)置為yes,以便能夠盡可能快的釋放內(nèi)存
activerehashing yes

5.hz:Redis調(diào)用內(nèi)部函數(shù)來執(zhí)行許多后臺任務(wù),比如在timeot中關(guān)閉客戶端的連接,清除過期的密鑰從未請求,等等。并非所有任務(wù)都以相同的頻率進行,但Redis會檢查根據(jù)指定的“hz”值執(zhí)行的任務(wù)。默認情況下,“hz”設(shè)置為10.提高值時將使用更多的CPURedis是空閑的,但同時會使Redis更具響應(yīng)性有很多鍵同時到期,超時可能會到期處理更精確。

hz 10

6.aof-rewrite-incremental-fsync:aof rewrite過程中,是否采取增量文件同步策略,默認為“yes”。 rewrite過程中,每32M數(shù)據(jù)進行一次文件同步,這樣可以減少aof大文件寫入對磁盤的操作次數(shù)

aof-rewrite-incremental-fsync yes

不怕從零開始,只怕從未啟程!

參考文獻:https://chembo.iteye.com/blog/2054021
Redis安裝目錄下的配置文件
https://blog.csdn.net/mysqldba23/article/details/67640478
延時監(jiān)控:https://redis.io/topics/latency-monitor
Redis中文官方教程:http://www.redis.net.cn/tutorial/3504.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天是參加聲音打卡第一天,昨天晚上太疲倦了,今天早上6點鐘起來爬樓聽完了昨晚的直播內(nèi)容。說實話,我參加聲音打卡,我...
    可晗_2e69閱讀 144評論 0 0
  • 從未涉足股市的我,順耳聽了一把陳浩的股票講座,覺得股市如人生蠻有意思的,陳浩在嬉笑調(diào)侃間告訴大家,股市如人...
    張夏閱讀 238評論 0 0
  • 當你沒有走過那條路,路上的風景全憑想象力的豐富腦補。 當一個人走過你沒走過的路,路上的風景全是親眼目睹,所見所聞特...
    妖孽卓大小姐閱讀 170評論 0 0

友情鏈接更多精彩內(nèi)容