面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇
這是我的第 34?篇原創文章
作者 |?老王(javacn666)
1 面試題
如何排查 Redis 中的慢查詢?
2 涉及相關問題
Redis 中有沒有慢查詢排查工具或者相關排查手段?
慢查詢日志都包含哪些信息?
慢查詢的相關配置項有哪些?默認值是啥?應該如何設置?
如果慢查詢的隊列滿了?會怎樣?
在代碼中如何實現 Redis 的慢查詢?
3 答案
首先來說 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) 12) (integer) 15819941313) (integer) 64) 1) "set"2) "msg"3) "xiaoming"5) "127.0.0.1:47068"6) "" 3) 1) (integer) 02) (integer) 15819940933) (integer) 54) 1) "config"2) "set"3) "slowlog-log-slower-than"4) "0"5) "127.0.0.1:47068"6) ""慢日志模擬添加,詳見視頻 。
慢日志查詢相關的配置信息有兩個:
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 視頻
視頻內容如下:
6 小結
本文我們介紹了慢查詢相關的兩個重要參數 slowlog-log-slower-than (用于設置慢查詢的評定時間) 和 slowlog-max-len 用來配置慢查詢日志的最大記錄數,然后通過修改 config set slowlog-log-slower-than 0 把所有操作都記錄在慢日志進行相關測試。我們可以使用 slowlog get [n] 查詢慢操作日志,使用 slowlog reset 清空慢查詢日志。最后給大家一個建議,可以定期檢查慢查詢日志,及時發現和改進 Redis 運行中不合理的操作。
更多內容,詳見視頻部分。
【END】
近期熱文
面試突擊 003 | Redis 如何實現查詢附近的人?視頻實戰版
面試突擊 002 | Redis 是如何處理已過期元素的?附視頻
面試突擊 001 | Redis 如何從海量數據中查詢出某一個 Key?視頻版
Java面試詳解(2020版):500+ 面試題和核心知識點詳解
面試珍藏:最常見的200多道Java面試題(2019年最新版)
關注下方二維碼,訂閱更多精彩內容
朕已閱?
總結
以上是生活随笔為你收集整理的面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 漫画:Integer 竟然有 4 种比较
- 下一篇: 消息队列终极解决方案——Stream(下