其餘更多java基礎文章:
java基礎學習(目錄)html
學習資料
redis高級功能——慢查詢java
Redis提供了slowlog-log-slower-than
和slowlog-max-len
配置來解決這兩個問題.從字面意思就能夠看出,slowlog-log-slower-than
就是這個預設閾值,它的單位是 微秒(1秒=1000000微秒) 默認值是10000,假如執行了一條"很慢"的命令(例如key *),若是執行時間超過10000微秒,那麼它將被記錄在慢查詢日誌中.redis
若是slowlog-log-slower-than=0
會記錄全部命令,slowlog-log-slower-than<0
對於任何命令都不會進行記錄.segmentfault
實際上Redis使用了一個列表來存儲慢查詢日誌,slowlog-max-len
就是列表的最大長度.一個新的命令知足慢查詢條件時被插入到這個列表中,當慢查詢日誌列表已處於其最大長度時,最先插入的一個命令將從列表中移出,例如slowlog-max-len
設置長度爲64.當有第65條慢查詢日誌插入的話,那麼隊頭的第一條數據就出列,第65條慢查詢就會入列.bash
在Redis中有兩種修改配置的方法,網絡
例以下面使用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以上.post
slowlog-log-slower-than
:默認值超過10毫秒斷定爲慢查詢,須要根據Redis併發量調整該值.因爲Redis採用單線程相應命令,對於高流量的場景,若是命令執行時間超過1毫秒以上,那麼Redis最多可支撐OPS不到1000所以對於高OPS場景下的Redis建議設置爲1毫秒.學習
慢查詢只記錄命令的執行時間,並不包括命令排隊和網絡傳輸時間.所以客戶端執行命令的時間會大於命令的實際執行時間.由於命令執行排隊機制,慢查詢會致使其餘命令級聯阻塞,所以客戶端出現請求超時時,須要檢查該時間點是否有對應的慢查詢,從而分析是否爲慢查詢致使的命令級聯阻塞.
因爲慢查詢日誌是一個先進先出的隊列,也就是說若是慢查詢比較多的狀況下,可能會丟失部分慢查詢命令,爲了防止這種狀況發生,能夠按期執行slowlog get
命令將慢查詢日誌持久化到其餘存儲中(例如:MySQL、ElasticSearch等),而後能夠經過可視化工具進行查詢.
學習資料
高可用Redis(六):瑞士軍刀之bitmap,HyperLoglog和GEO
redis 用setbit(bitmap)統計活躍用戶