redis學習——高階功能

Hiway發表於2019-09-21

其他更多java基礎文章:
java基礎學習(目錄)


慢查詢

學習資料
redis高階功能——慢查詢

慢查詢的兩個配置引數

Redis提供了slowlog-log-slower-thanslowlog-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可能存在的瓶頸,但在實際使用過程中要注意以下幾點:

  1. slowlog-max-len:線上建議調大慢查詢列表,記錄慢查詢時Redis會對長命令做階段操作,並不會佔用大量記憶體.增大慢查詢列表可以減緩慢查詢被剔除的可能,例如線上可設定為1000以上.

  2. slowlog-log-slower-than:預設值超過10毫秒判定為慢查詢,需要根據Redis併發量調整該值.由於Redis採用單執行緒相應命令,對於高流量的場景,如果命令執行時間超過1毫秒以上,那麼Redis最多可支撐OPS不到1000因此對於高OPS場景下的Redis建議設定為1毫秒.

  3. 慢查詢只記錄命令的執行時間,並不包括命令排隊和網路傳輸時間.因此客戶端執行命令的時間會大於命令的實際執行時間.因為命令執行排隊機制,慢查詢會導致其他命令級聯阻塞,因此客戶端出現請求超時時,需要檢查該時間點是否有對應的慢查詢,從而分析是否為慢查詢導致的命令級聯阻塞.

  4. 由於慢查詢日誌是一個先進先出的佇列,也就是說如果慢查詢比較多的情況下,可能會丟失部分慢查詢命令,為了防止這種情況發生,可以定期執行slowlog get命令將慢查詢日誌持久化到其他儲存中(例如:MySQL、ElasticSearch等),然後可以通過視覺化工具進行查詢.

pipline和事務

學習資料
redis學習筆記 - Pipeline與事務

釋出與訂閱

學習資料
Redis 訂閱釋出 - Jedis實現
【由淺至深】redis 實現釋出訂閱的幾種方式

Bitmap/Hyperloglog/Geo

學習資料
高可用Redis(六):瑞士軍刀之bitmap,HyperLoglog和GEO
redis 用setbit(bitmap)統計活躍使用者

相關文章