一分鐘搞懂Redis的慢查詢?nèi)罩静僮?/h1>
更新時間:2021年11月24日 15:32:05 作者:萬貓學(xué)社
redis慢查詢指的是命令執(zhí)行時長比較長的查詢,本文詳細的介紹了慢查詢的具體操作,具有一定的參考價值,感興趣的可以了解一下
什么是慢查詢?
慢查詢,顧名思義就是比較慢的查詢,但是究竟是哪里慢呢?首先,我們了解一下Redis命令執(zhí)行的整個過程:

- 發(fā)送命令
- 命令排隊
- 命令執(zhí)行
- 返回結(jié)果
在慢查詢的定義中,統(tǒng)計比較慢的時間段指的是命令執(zhí)行這個步驟。沒有慢查詢,并不表示客戶端沒有超時問題,有可能網(wǎng)絡(luò)傳輸有延遲,也有可能排隊的命令比較多。
因為Redis中命令執(zhí)行的排隊機制,慢查詢會導(dǎo)致其他命令的級聯(lián)阻塞,所以當(dāng)客戶端出現(xiàn)請求超時的時候,需要檢查該時間點是否有慢查詢,從而分析出由于慢查詢導(dǎo)致的命令級聯(lián)阻塞。
什么是慢查詢?nèi)罩荆?/h2>
慢查詢?nèi)罩臼荝edis服務(wù)端在命令執(zhí)行前后計算每條命令的執(zhí)行時長,當(dāng)超過某個閾值是記錄下來的日志。日志中記錄了慢查詢發(fā)生的時間,還有執(zhí)行時長、具體什么命令等信息,它可以用來幫助開發(fā)和運維人員定位系統(tǒng)中存在的慢查詢。
如何獲取慢查詢?nèi)罩荆?/h2>
可以使用slowlog get命令獲取慢查詢?nèi)罩?,?code>slowlog get后面還可以加一個數(shù)字,用于指定獲取慢查詢?nèi)罩镜臈l數(shù),比如,獲取3條慢查詢?nèi)罩荆?/p>
> slowlog get 3
1) 1) (integer) 6107
2) (integer) 1616398930
3) (integer) 3109
4) 1) "config"
2) "rewrite"
2) 1) (integer) 6106
2) (integer) 1613701788
3) (integer) 36004
4) 1) "flushall"
3) 1) (integer) 6105
2) (integer) 1608722338
3) (integer) 20449
4) 1) "scan"
2) "0"
3) "MATCH"
4) "*comment*"
5) "COUNT"
6) "10000"
從上面的例子中,可以看出每一條慢查詢?nèi)罩径加?個屬性組成:
- 唯一標(biāo)識ID
- 命令執(zhí)行的時間戳
- 命令執(zhí)行時長
- 執(zhí)行的命名和參數(shù)
如何獲取慢查詢?nèi)罩镜拈L度?
可以使用slowlog len命令獲取慢查詢?nèi)罩镜拈L度,比如:
> slowlog len
(integer) 121
在上例中,當(dāng)前Redis中有121條慢查詢?nèi)罩尽?/p>
如何清理慢查詢?nèi)罩荆?/h2>
可以使用slowlog reset命令清理慢查詢?nèi)罩荆热纾?/p>
> slowlog len
(integer) 121
> slowlog reset
OK
> slowlog len
(integer) 0
怎么配置慢查詢的參數(shù)?
正如上面提到的,慢查詢需要如下兩個配置:
- 命令執(zhí)行時長的指定閾值。
- 存放慢查詢?nèi)罩镜臈l數(shù)。
Redis對應(yīng)提供了兩個參數(shù):slowlog-log-slower-than和slowlog-max-len,接下來我們詳細介紹一下這兩個參數(shù)。
slowlog-log-slower-than
slowlog-log-slower-than的作用是指定命令執(zhí)行時長的閾值,執(zhí)行命令的時長超過這個閾值時就會被記錄下來。它的單位是微秒(1秒 = 1000毫秒 = 1000000微秒),默認是10000微秒。如果把slowlog-log-slower-than設(shè)置為0,將會記錄所有命令到日志中。如果把slowlog-log-slower-than設(shè)置小于0,將會不記錄任何命令到日志中。
在實際的生產(chǎn)環(huán)境中,需要根據(jù)Redis并發(fā)量來調(diào)整該配置。因為Redis采用單線程響應(yīng)命令,如果命令執(zhí)行時間在1000微秒以上,那么Redis最多可支撐OPS不到1000,所以對于高并發(fā)場景的Redis建議設(shè)置為1000微秒。
slowlog-max-len
slowlog-max-len的作用是指定慢查詢?nèi)罩咀疃啻鎯Φ臈l數(shù)。實際上,Redis使用了一個列表存放慢查詢?nèi)罩?,slowlog-max-len就是這個列表的最大長度。當(dāng)一個新的命令滿足滿足慢查詢條件時,被插入這個列表中。當(dāng)慢查詢?nèi)罩玖斜硪呀?jīng)達到最大長度時,最早插入的那條命令將被從列表中移出。比如,slowlog-max-len被設(shè)置為10,當(dāng)有第11條命令插入時,在列表中的第1條命令先被移出,然后再把第11條命令放入列表。
記錄慢查詢是Redis會對長命令進行截斷,不會大量占用大量內(nèi)存。在實際的生產(chǎn)環(huán)境中,為了減緩慢查詢被移出的可能和更方便地定位慢查詢,建議將慢查詢?nèi)罩镜拈L度調(diào)整的大一些。比如可以設(shè)置為1000以上。
如何進行配置
在Redis中有兩個修改配置的方法:
slowlog-log-slower-than 1000
slowlog-max-len 1200
修改Redis配置文件。比如,把slowlog-log-slower-than設(shè)置為1000,slowlog-max-len設(shè)置為1200:
使用config set命令動態(tài)修改。比如,還是把slowlog-log-slower-than設(shè)置為1000,slowlog-max-len設(shè)置為1200:
> config set slowlog-log-slower-than 1000
OK
> config set slowlog-max-len 1200
OK
> config rewrite
OK
如果要Redis把配置持久化到本地配置文件,需要執(zhí)行config rewrite命令。
總結(jié)
慢查詢指的是命令執(zhí)行時長比較長的查詢。通過slowlog get命令獲取慢查詢?nèi)罩荆煌ㄟ^slowlog len命令獲取慢查詢?nèi)罩镜拈L度;通過slowlog reset命令清理慢查詢?nèi)罩尽Mㄟ^slowlog-log-slower-than配置命令執(zhí)行時長的閾值;通過slowlog-max-len配置慢查詢?nèi)罩咀疃啻鎯Φ臈l數(shù)。
到此這篇關(guān)于一分鐘搞懂Redis的慢查詢?nèi)罩静僮鞯奈恼戮徒榻B到這了,更多相關(guān)Redis 慢查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
-
解讀redis?slaveof命令執(zhí)行后為什么需要清庫重新同步
這篇文章主要介紹了redis?slaveof命令執(zhí)行后為什么需要清庫重新同步,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教 2025-04-04
-
RedisDesktopManager?連接redis的方法
這篇文章主要介紹了RedisDesktopManager?連接redis,需要的朋友可以參考下 2023-08-08
-
Redis?延時任務(wù)實現(xiàn)及與定時任務(wù)區(qū)別詳解
這篇文章主要為大家介紹了Redis?延時任務(wù)實現(xiàn)及與定時任務(wù)區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪 2023-06-06
-
Redis中的3種特殊數(shù)據(jù)結(jié)構(gòu)詳解
在本文中,我們對三種特殊的數(shù)據(jù)類型進行了介紹,它們分別是geospatial(地理空間數(shù)據(jù)類型)、HyperLogLogs和Bitmaps(位圖),這些數(shù)據(jù)類型在不同的領(lǐng)域和應(yīng)用中發(fā)揮著重要作用,并且具有各自獨特的特性和用途,對Redis特殊數(shù)據(jù)結(jié)構(gòu)相關(guān)知識感興趣的朋友一起看看吧 2024-02-02
什么是慢查詢?
慢查詢,顧名思義就是比較慢的查詢,但是究竟是哪里慢呢?首先,我們了解一下Redis命令執(zhí)行的整個過程:

- 發(fā)送命令
- 命令排隊
- 命令執(zhí)行
- 返回結(jié)果
在慢查詢的定義中,統(tǒng)計比較慢的時間段指的是命令執(zhí)行這個步驟。沒有慢查詢,并不表示客戶端沒有超時問題,有可能網(wǎng)絡(luò)傳輸有延遲,也有可能排隊的命令比較多。
因為Redis中命令執(zhí)行的排隊機制,慢查詢會導(dǎo)致其他命令的級聯(lián)阻塞,所以當(dāng)客戶端出現(xiàn)請求超時的時候,需要檢查該時間點是否有慢查詢,從而分析出由于慢查詢導(dǎo)致的命令級聯(lián)阻塞。
什么是慢查詢?nèi)罩荆?/h2>
慢查詢?nèi)罩臼荝edis服務(wù)端在命令執(zhí)行前后計算每條命令的執(zhí)行時長,當(dāng)超過某個閾值是記錄下來的日志。日志中記錄了慢查詢發(fā)生的時間,還有執(zhí)行時長、具體什么命令等信息,它可以用來幫助開發(fā)和運維人員定位系統(tǒng)中存在的慢查詢。
如何獲取慢查詢?nèi)罩荆?/h2>
可以使用slowlog get命令獲取慢查詢?nèi)罩?,?code>slowlog get后面還可以加一個數(shù)字,用于指定獲取慢查詢?nèi)罩镜臈l數(shù),比如,獲取3條慢查詢?nèi)罩荆?/p>
> slowlog get 3
1) 1) (integer) 6107
2) (integer) 1616398930
3) (integer) 3109
4) 1) "config"
2) "rewrite"
2) 1) (integer) 6106
2) (integer) 1613701788
3) (integer) 36004
4) 1) "flushall"
3) 1) (integer) 6105
2) (integer) 1608722338
3) (integer) 20449
4) 1) "scan"
2) "0"
3) "MATCH"
4) "*comment*"
5) "COUNT"
6) "10000"
從上面的例子中,可以看出每一條慢查詢?nèi)罩径加?個屬性組成:
- 唯一標(biāo)識ID
- 命令執(zhí)行的時間戳
- 命令執(zhí)行時長
- 執(zhí)行的命名和參數(shù)
如何獲取慢查詢?nèi)罩镜拈L度?
可以使用slowlog len命令獲取慢查詢?nèi)罩镜拈L度,比如:
> slowlog len (integer) 121
在上例中,當(dāng)前Redis中有121條慢查詢?nèi)罩尽?/p>
如何清理慢查詢?nèi)罩荆?/h2>
可以使用slowlog reset命令清理慢查詢?nèi)罩荆热纾?/p>
> slowlog len (integer) 121 > slowlog reset OK > slowlog len (integer) 0
怎么配置慢查詢的參數(shù)?
正如上面提到的,慢查詢需要如下兩個配置:
- 命令執(zhí)行時長的指定閾值。
- 存放慢查詢?nèi)罩镜臈l數(shù)。
Redis對應(yīng)提供了兩個參數(shù):slowlog-log-slower-than和slowlog-max-len,接下來我們詳細介紹一下這兩個參數(shù)。
slowlog-log-slower-than
slowlog-log-slower-than的作用是指定命令執(zhí)行時長的閾值,執(zhí)行命令的時長超過這個閾值時就會被記錄下來。它的單位是微秒(1秒 = 1000毫秒 = 1000000微秒),默認是10000微秒。如果把slowlog-log-slower-than設(shè)置為0,將會記錄所有命令到日志中。如果把slowlog-log-slower-than設(shè)置小于0,將會不記錄任何命令到日志中。
在實際的生產(chǎn)環(huán)境中,需要根據(jù)Redis并發(fā)量來調(diào)整該配置。因為Redis采用單線程響應(yīng)命令,如果命令執(zhí)行時間在1000微秒以上,那么Redis最多可支撐OPS不到1000,所以對于高并發(fā)場景的Redis建議設(shè)置為1000微秒。
slowlog-max-len
slowlog-max-len的作用是指定慢查詢?nèi)罩咀疃啻鎯Φ臈l數(shù)。實際上,Redis使用了一個列表存放慢查詢?nèi)罩?,slowlog-max-len就是這個列表的最大長度。當(dāng)一個新的命令滿足滿足慢查詢條件時,被插入這個列表中。當(dāng)慢查詢?nèi)罩玖斜硪呀?jīng)達到最大長度時,最早插入的那條命令將被從列表中移出。比如,slowlog-max-len被設(shè)置為10,當(dāng)有第11條命令插入時,在列表中的第1條命令先被移出,然后再把第11條命令放入列表。
記錄慢查詢是Redis會對長命令進行截斷,不會大量占用大量內(nèi)存。在實際的生產(chǎn)環(huán)境中,為了減緩慢查詢被移出的可能和更方便地定位慢查詢,建議將慢查詢?nèi)罩镜拈L度調(diào)整的大一些。比如可以設(shè)置為1000以上。
如何進行配置
在Redis中有兩個修改配置的方法:
slowlog-log-slower-than 1000 slowlog-max-len 1200
修改Redis配置文件。比如,把slowlog-log-slower-than設(shè)置為1000,slowlog-max-len設(shè)置為1200:
使用config set命令動態(tài)修改。比如,還是把slowlog-log-slower-than設(shè)置為1000,slowlog-max-len設(shè)置為1200:
> config set slowlog-log-slower-than 1000 OK > config set slowlog-max-len 1200 OK > config rewrite OK
如果要Redis把配置持久化到本地配置文件,需要執(zhí)行config rewrite命令。
總結(jié)
慢查詢指的是命令執(zhí)行時長比較長的查詢。通過slowlog get命令獲取慢查詢?nèi)罩荆煌ㄟ^slowlog len命令獲取慢查詢?nèi)罩镜拈L度;通過slowlog reset命令清理慢查詢?nèi)罩尽Mㄟ^slowlog-log-slower-than配置命令執(zhí)行時長的閾值;通過slowlog-max-len配置慢查詢?nèi)罩咀疃啻鎯Φ臈l數(shù)。
到此這篇關(guān)于一分鐘搞懂Redis的慢查詢?nèi)罩静僮鞯奈恼戮徒榻B到這了,更多相關(guān)Redis 慢查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解讀redis?slaveof命令執(zhí)行后為什么需要清庫重新同步
這篇文章主要介紹了redis?slaveof命令執(zhí)行后為什么需要清庫重新同步,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
RedisDesktopManager?連接redis的方法
這篇文章主要介紹了RedisDesktopManager?連接redis,需要的朋友可以參考下2023-08-08
Redis?延時任務(wù)實現(xiàn)及與定時任務(wù)區(qū)別詳解
這篇文章主要為大家介紹了Redis?延時任務(wù)實現(xiàn)及與定時任務(wù)區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
Redis中的3種特殊數(shù)據(jù)結(jié)構(gòu)詳解
在本文中,我們對三種特殊的數(shù)據(jù)類型進行了介紹,它們分別是geospatial(地理空間數(shù)據(jù)類型)、HyperLogLogs和Bitmaps(位圖),這些數(shù)據(jù)類型在不同的領(lǐng)域和應(yīng)用中發(fā)揮著重要作用,并且具有各自獨特的特性和用途,對Redis特殊數(shù)據(jù)結(jié)構(gòu)相關(guān)知識感興趣的朋友一起看看吧2024-02-02
Redis 中spark參數(shù)executor-cores引起的異常解決辦法

