面試突擊 004 | 如何排查 Redis 中的慢查詢?視頻實戰篇

面試突擊 004 | 如何排查 Redis 中的慢查詢?視頻實戰篇

這是個人第 34 篇原創文章
做者 | 老王(javacn666)
1 面試題java

如何排查 Redis 中的慢查詢?
2 涉及相關問題面試

  1. Redis 中有沒有慢查詢排查工具或者相關排查手段?
  2. 慢查詢日誌都包含哪些信息?
  3. 慢查詢的相關配置項有哪些?默認值是啥?應該如何設置?
  4. 若是慢查詢的隊列滿了?會怎樣?
  5. 在代碼中如何實現 Redis 的慢查詢?
    3 答案

首先來講 Redis 中有慢查詢日誌,是能夠實現 Redis 慢操做排查的。redis

  • 慢日誌包含的內容有:
  • 慢查詢的具體執行命令;
  • 慢查詢的執行時間;
  • 慢查詢的執行時長。
    慢查詢日誌內容以下:
    127.0.0.1:6379> slowlog get #慢日誌查詢
    1) 1) (integer) 2 #慢日誌下標
    2) (integer) 1581994139 #執行時間
    3) (integer) 5 #花費時間 (單位微秒)
    4) 1) "set" #執行的具體命令
      2) "lang"
      3) "java"
    5) "127.0.0.1:47068"
    6) ""
    2) 1) (integer) 1
    2) (integer) 1581994131
    3) (integer) 6
    4) 1) "set"
      2) "msg"
      3) "xiaoming"
    5) "127.0.0.1:47068"
    6) ""
    3) 1) (integer) 0
    2) (integer) 1581994093
    3) (integer) 5
    4) 1) "config"
      2) "set"
      3) "slowlog-log-slower-than"
      4) "0"
    5) "127.0.0.1:47068"
    6) ""

    慢日誌模擬添加,詳見視頻 。
    慢日誌查詢相關的配置信息有兩個:ide

  • slowlog-log-slower-than :用於設置慢查詢的評定時間,也就是說超過此配置項的命令,將會被當成慢操做記錄在慢查詢日誌中,它執行單位是微秒 (1 秒等於 1000000 微秒);
  • slowlog-max-len :用來配置慢查詢日誌的最大記錄數。
    默認值以下:
    127.0.0.1:6379> config get slowlog-log-slower-than #慢查詢判斷時間
    1) "slowlog-log-slower-than"
    2) "10000"
    127.0.0.1:6379> config get slowlog-max-len #慢查詢最大記錄條數
    1) "slowlog-max-len"
    2) "128"

    能夠看出慢查詢的臨界值是 10000 微秒,默認保存 128 條慢查詢記錄。
    4 代碼實戰工具

本文咱們使用 Java 來實現慢查詢日誌的操做,代碼以下:測試

import redis.clients.jedis.Jedis;
import redis.clients.jedis.util.Slowlog;
import utils.JedisUtils;
import java.util.List;
/**
 * 慢查詢
 */
public class SlowExample {
    public static void main(String[] args) {
        Jedis jedis = JedisUtils.getJedis();
        // 插入慢查詢(由於 slowlog-log-slower-than 設置爲 0,全部命令都符合慢操做)
        jedis.set("db", "java");
        jedis.set("lang", "java");
        // 慢查詢記錄的條數
        long logLen = jedis.slowlogLen();
        // 全部慢查詢
        List<Slowlog> list = jedis.slowlogGet();
        // 循環打印
        for (Slowlog item : list) {
            System.out.println("慢查詢命令:"+ item.getArgs()+
                    " 執行了:"+item.getExecutionTime()+" 微秒");
        }
        // 清空慢查詢日誌
        jedis.slowlogReset();
    }
}

以上代碼執行結果以下:
慢查詢命令:[SLOWLOG, len] 執行了:1 微秒
慢查詢命令:[SET, lang, java] 執行了:2 微秒
慢查詢命令:[SET, db, java] 執行了:4 微秒
慢查詢命令:[SLOWLOG, reset] 執行了:155 微秒
5 視頻日誌

視頻內容以下:code

6 小結視頻

本文咱們介紹了慢查詢相關的兩個重要參數 slowlog-log-slower-than (用於設置慢查詢的評定時間) 和 slowlog-max-len 用來配置慢查詢日誌的最大記錄數,而後經過修改 config set slowlog-log-slower-than 0 把全部操做都記錄在慢日誌進行相關測試。咱們能夠使用 slowlog get [n] 查詢慢操做日誌,使用 slowlog reset 清空慢查詢日誌。最後給你們一個建議,能夠按期檢查慢查詢日誌,及時發現和改進 Redis 運行中不合理的操做。
更多內容,詳見視頻部分。
【END】
近期熱文blog

  • 面試突擊 003 | Redis 如何實現查詢附近的人?視頻實戰版
  • 面試突擊 002 | Redis 是如何處理已過時元素的?附視頻
  • 面試突擊 001 | Redis 如何從海量數據中查詢出某一個 Key?視頻版
  • Java面試詳解(2020版):500+ 面試題和核心知識點詳解
  • 面試珍藏:最多見的200多道Java面試題(2019年最新版)
    關注下方二維碼,訂閱更多精彩內容
    面試突擊 004 | 如何排查 Redis 中的慢查詢?視頻實戰篇
相關文章
相關標籤/搜索