其他更多java基礎文章:
java基礎學習(目錄)
慢查詢
學習資料
redis高階功能——慢查詢
慢查詢的兩個配置引數
Redis提供了slowlog-log-slower-than
和slowlog-max-len
配置來解決這兩個問題.從字面意思就可以看出,slowlog-log-slower-than
就是這個預設閾值,它的單位是 微秒(1秒=1000000微秒) 預設值是10000,假如執行了一條"很慢"的命令(例如key *),如果執行時間超過10000微秒,那麼它將被記錄在慢查詢日誌中.
如果slowlog-log-slower-than=0
會記錄所有命令,slowlog-log-slower-than<0
對於任何命令都不會進行記錄.
實際上Redis使用了一個列表來儲存慢查詢日誌,slowlog-max-len
就是列表的最大長度.一個新的命令滿足慢查詢條件時被插入到這個列表中,當慢查詢日誌列表已處於其最大長度時,最早插入的一個命令將從列表中移出,例如slowlog-max-len
設定長度為64.當有第65條慢查詢日誌插入的話,那麼隊頭的第一條資料就出列,第65條慢查詢就會入列.
在Redis中有兩種修改配置的方法,
- 一種是修改配置檔案
- 另一種是使用config set命令動態修改
例如下面使用config set命令將slowlog-log-slower-than設定為20000微妙.slowlog-max-len設定為1024:
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1024
config rewrite
複製程式碼
實踐總結
慢查詢功能可以有效地幫助我們找到Redis可能存在的瓶頸,但在實際使用過程中要注意以下幾點:
-
slowlog-max-len
:線上建議調大慢查詢列表,記錄慢查詢時Redis會對長命令做階段操作,並不會佔用大量記憶體.增大慢查詢列表可以減緩慢查詢被剔除的可能,例如線上可設定為1000以上. -
slowlog-log-slower-than
:預設值超過10毫秒判定為慢查詢,需要根據Redis併發量調整該值.由於Redis採用單執行緒相應命令,對於高流量的場景,如果命令執行時間超過1毫秒以上,那麼Redis最多可支撐OPS不到1000因此對於高OPS場景下的Redis建議設定為1毫秒. -
慢查詢只記錄命令的執行時間,並不包括命令排隊和網路傳輸時間.因此客戶端執行命令的時間會大於命令的實際執行時間.因為命令執行排隊機制,慢查詢會導致其他命令級聯阻塞,因此客戶端出現請求超時時,需要檢查該時間點是否有對應的慢查詢,從而分析是否為慢查詢導致的命令級聯阻塞.
-
由於慢查詢日誌是一個先進先出的佇列,也就是說如果慢查詢比較多的情況下,可能會丟失部分慢查詢命令,為了防止這種情況發生,可以定期執行
slowlog get
命令將慢查詢日誌持久化到其他儲存中(例如:MySQL、ElasticSearch等),然後可以通過視覺化工具進行查詢.
pipline和事務
釋出與訂閱
Bitmap/Hyperloglog/Geo
學習資料
高可用Redis(六):瑞士軍刀之bitmap,HyperLoglog和GEO
redis 用setbit(bitmap)統計活躍使用者