面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇
這是我的第 34?篇原創(chuàng)文章
作者 |?老王(javacn666)
1 面試題
如何排查 Redis 中的慢查詢?
2 涉及相關(guān)問題
Redis 中有沒有慢查詢排查工具或者相關(guān)排查手段?
慢查詢?nèi)罩径及男┬畔?#xff1f;
慢查詢的相關(guān)配置項(xiàng)有哪些?默認(rèn)值是啥?應(yīng)該如何設(shè)置?
如果慢查詢的隊(duì)列滿了?會(huì)怎樣?
在代碼中如何實(shí)現(xiàn) Redis 的慢查詢?
3 答案
首先來說 Redis 中有慢查詢?nèi)罩?#xff0c;是可以實(shí)現(xiàn) Redis 慢操作排查的。
慢日志包含的內(nèi)容有:
慢查詢的具體執(zhí)行命令;
慢查詢的執(zhí)行時(shí)間;
慢查詢的執(zhí)行時(shí)長。
慢查詢?nèi)罩緝?nèi)容如下:
127.0.0.1:6379> slowlog get #慢日志查詢 1) 1) (integer) 2 #慢日志下標(biāo)2) (integer) 1581994139 #執(zhí)行時(shí)間3) (integer) 5 #花費(fèi)時(shí)間 (單位微秒)4) 1) "set" #執(zhí)行的具體命令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) ""慢日志模擬添加,詳見視頻 。
慢日志查詢相關(guān)的配置信息有兩個(gè):
slowlog-log-slower-than :用于設(shè)置慢查詢的評定時(shí)間,也就是說超過此配置項(xiàng)的命令,將會(huì)被當(dāng)成慢操作記錄在慢查詢?nèi)罩局?#xff0c;它執(zhí)行單位是微秒 (1 秒等于 1000000 微秒);
slowlog-max-len :用來配置慢查詢?nèi)罩镜淖畲笥涗洈?shù)。
默認(rèn)值如下:
127.0.0.1:6379> config get slowlog-log-slower-than #慢查詢判斷時(shí)間 1) "slowlog-log-slower-than" 2) "10000" 127.0.0.1:6379> config get slowlog-max-len #慢查詢最大記錄條數(shù) 1) "slowlog-max-len" 2) "128"可以看出慢查詢的臨界值是 10000 微秒,默認(rèn)保存 128 條慢查詢記錄。
4 代碼實(shí)戰(zhàn)
本文我們使用 Java 來實(shí)現(xiàn)慢查詢?nèi)罩镜牟僮?#xff0c;代碼如下:
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();// 插入慢查詢(因?yàn)?slowlog-log-slower-than 設(shè)置為 0,所有命令都符合慢操作)jedis.set("db", "java");jedis.set("lang", "java");// 慢查詢記錄的條數(shù)long logLen = jedis.slowlogLen();// 所有慢查詢List<Slowlog> list = jedis.slowlogGet();// 循環(huán)打印for (Slowlog item : list) {System.out.println("慢查詢命令:"+ item.getArgs()+" 執(zhí)行了:"+item.getExecutionTime()+" 微秒");}// 清空慢查詢?nèi)罩緅edis.slowlogReset();} }以上代碼執(zhí)行結(jié)果如下:
慢查詢命令:[SLOWLOG, len] 執(zhí)行了:1 微秒
慢查詢命令:[SET, lang, java] 執(zhí)行了:2 微秒
慢查詢命令:[SET, db, java] 執(zhí)行了:4 微秒
慢查詢命令:[SLOWLOG, reset] 執(zhí)行了:155 微秒
5 視頻
視頻內(nèi)容如下:
6 小結(jié)
本文我們介紹了慢查詢相關(guān)的兩個(gè)重要參數(shù) slowlog-log-slower-than (用于設(shè)置慢查詢的評定時(shí)間) 和 slowlog-max-len 用來配置慢查詢?nèi)罩镜淖畲笥涗洈?shù),然后通過修改 config set slowlog-log-slower-than 0 把所有操作都記錄在慢日志進(jìn)行相關(guān)測試。我們可以使用 slowlog get [n] 查詢慢操作日志,使用 slowlog reset 清空慢查詢?nèi)罩尽W詈蠼o大家一個(gè)建議,可以定期檢查慢查詢?nèi)罩?#xff0c;及時(shí)發(fā)現(xiàn)和改進(jìn) Redis 運(yùn)行中不合理的操作。
更多內(nèi)容,詳見視頻部分。
【END】
近期熱文
面試突擊 003 | Redis 如何實(shí)現(xiàn)查詢附近的人?視頻實(shí)戰(zhàn)版
面試突擊 002 | Redis 是如何處理已過期元素的?附視頻
面試突擊 001 | Redis 如何從海量數(shù)據(jù)中查詢出某一個(gè) Key?視頻版
Java面試詳解(2020版):500+ 面試題和核心知識點(diǎn)詳解
面試珍藏:最常見的200多道Java面試題(2019年最新版)
關(guān)注下方二維碼,訂閱更多精彩內(nèi)容
朕已閱?
總結(jié)
以上是生活随笔為你收集整理的面试突击 004 | 如何排查 Redis 中的慢查询?视频实战篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 漫画:Integer 竟然有 4 种比较
- 下一篇: linux cmake编译源码,linu