Redis慢查詢?nèi)罩九c監(jiān)視器問(wèn)題
我們都知道MySQL有慢查詢?nèi)罩?/p>
Redis也有慢查詢?nèi)罩?,可用于監(jiān)視和優(yōu)化查詢
1、慢查詢?cè)O(shè)置
在redis.conf中可以配置和慢查詢?nèi)罩鞠嚓P(guān)的選項(xiàng):
#執(zhí)行時(shí)間超過(guò)多少微秒的命令請(qǐng)求會(huì)被記錄到日志上 0 :全記錄 <0 不記錄 slowlog-log-slower-than 10000 #slowlog-max-len 存儲(chǔ)慢查詢?nèi)罩緱l數(shù) slowlog-max-len 128
Redis使用列表存儲(chǔ)慢查詢?nèi)罩?,采用?duì)列方式(FIFO)
config set
的方式可以臨時(shí)設(shè)置,redis重啟后就無(wú)效config set slowlog-log-slower-than
微秒config set slowlog-max-len
條數(shù)
查看日志:slowlog get [n]
127.0.0.1:6379> config set slowlog-log-slower-than 0 OK 127.0.0.1:6379> config set slowlog-max-len 2 OK 127.0.0.1:6379> set name:001 zhaoyun OK 127.0.0.1:6379> set name:002 zhangfei OK 127.0.0.1:6379> get name:002 "zhangfei" 127.0.0.1:6379> slowlog get 1) 1) (integer) 7 # 日志的唯一標(biāo)識(shí)符(uid) 2) (integer) 1589774302 # 命令執(zhí)行時(shí)的UNIX時(shí)間戳 3) (integer) 65 # 命令執(zhí)行的時(shí)長(zhǎng)(微秒) 4) 1) "get" # 執(zhí)行命令及參數(shù) 2) "name:002" 5) "127.0.0.1:37277" 6) "" 2) 1) (integer) 6 2) (integer) 1589774281 3) (integer) 7 4) 1) "set" 2) "name:002" 3) "zhangfei" 5) "127.0.0.1:37277" 6) "" # set和get都記錄,第一條被移除了。
2、慢查詢定位&處理
使用slowlog get 可以獲得執(zhí)行較慢的redis命令,針對(duì)該命令可以進(jìn)行優(yōu)化:
- 盡量使用短的key,對(duì)于value有些也可精簡(jiǎn),能使用int就int。
- 避免使用keys *、hgetall等全量操作。
- 減少大key的存取,打散為小key 100K以上
- 將rdb改為aof模式
rdb fork 子進(jìn)程 數(shù)據(jù)量過(guò)大 主進(jìn)程阻塞 redis性能大幅下降
關(guān)閉持久化,(適合于數(shù)據(jù)量較小,有固定數(shù)據(jù)源)
- 想要一次添加多條數(shù)據(jù)的時(shí)候可以使用管道
- 盡可能地使用哈希存儲(chǔ)
- 盡量限制下redis使用的內(nèi)存大小,這樣可以避免redis使用swap分區(qū)或者出現(xiàn)OOM錯(cuò)誤
內(nèi)存與硬盤(pán)的swap
3、監(jiān)視器
Redis客戶端通過(guò)執(zhí)行MONITOR命令可以將自己變?yōu)橐粋€(gè)監(jiān)視器,實(shí)時(shí)地接受并打印出服務(wù)器當(dāng)前處理的命令請(qǐng)求的相關(guān)信息。
此時(shí),當(dāng)其他客戶端向服務(wù)器發(fā)送一條命令請(qǐng)求時(shí),服務(wù)器除了會(huì)處理這條命令請(qǐng)求之外,還會(huì)將這條命令請(qǐng)求的信息發(fā)送給所有監(jiān)視器。
Redis客戶端1
127.0.0.1:6379> monitor OK 1589706136.030138 [0 127.0.0.1:42907] "COMMAND" 1589706145.763523 [0 127.0.0.1:42907] "set" "name:10" "zhaoyun" 1589706163.756312 [0 127.0.0.1:42907] "get" "name:10"
Redis客戶端2
127.0.0.1:6379> 127.0.0.1:6379> set name:10 zhaoyun OK 127.0.0.1:6379> get name:10 "zhaoyun"
4、Redis監(jiān)控平臺(tái)
grafana、prometheus以及redis_exporter。
Grafana 是一個(gè)開(kāi)箱即用的可視化工具,具有功能齊全的度量?jī)x表盤(pán)和圖形編輯器,有靈活豐富的圖形化選項(xiàng),可以混合多種風(fēng)格,支持多個(gè)數(shù)據(jù)源特點(diǎn)。
Prometheus是一個(gè)開(kāi)源的服務(wù)監(jiān)控系統(tǒng),它通過(guò)HTTP協(xié)議從遠(yuǎn)程的機(jī)器收集數(shù)據(jù)并存儲(chǔ)在本地的時(shí)序數(shù)據(jù)庫(kù)上。
redis_exporter為Prometheus提供了redis指標(biāo)的導(dǎo)出,配合Prometheus以及grafana進(jìn)行可視化及監(jiān)控。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis Desktop Manager(Redis可視化工具)安裝及使用圖文教程
這篇文章主要介紹了Redis Desktop Manager(Redis可視化工具)安裝及使用圖文教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04redis緩存數(shù)據(jù)庫(kù)中數(shù)據(jù)的方法
這篇文章主要為大家詳細(xì)介紹了redis緩存數(shù)據(jù)庫(kù)中數(shù)據(jù)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07