首先我們需要知道redis的慢查詢日志有什么用?日常在使用redis的時候為什么要用慢查詢日志?
第一個問題:
慢查詢日志是為了記錄執行時間超過給定時長的redis命令請求
第二個問題:
讓使用者更好地監視和找出在業務中一些慢redis操作,找到更好的優化方法
在Redis中,關於慢查詢有兩個設置--慢查詢最大超時時間和慢查詢最大日志數。
1. 可以通過修改配置文件或者直接在交互模式下輸入以下命令來設置慢查詢的時間限制,當超過這個時間,查詢的記錄就會加入到日志文件中。
CONFIG SET slowlog-log-slower-than num
設置超過多少微妙的查詢為慢查詢,並且將這些慢查詢加入到日志文件中,num的單位為毫秒,windows下redis的默認慢查詢時10000微妙即10毫秒。
2. 可以通過設置最大數量限制日志中保存的慢查詢日志的數量,此設置在交互模式下的命令如下:
CONFIG SET slowlog-max-len num
設置日志的最大數量,num無單位值,windows下redis默認慢查詢日志的記錄數量為128條。
命令的解析:
CONFIG 命令會使redis客戶端自行去尋找redis的.conf 配置文件,找到對應的配置項進行修改。
以上的都是在交互模式下對redis進行配置,跟直接在.conf文件下修改配置行沒有什么區別,都是可以實現以上的慢查詢日志記錄功能的,但是需要注意的是,在客戶端的交互模式下輸入CONFIG SET命令,只針對當前的會話來執行日志記錄的設置,其他的會話(重新啟動redis服務端),那么還是老樣子,按照redis.conf文件的默認設置來執行?為什么會是這樣的?因為redis是基於內存的,當一個退出一個客戶端之后,所有的設置都會退回到默認版本。下次想設置慢查詢日志配置,還是需要重新鍵入命令。那么在.conf文件下中修改配置呢?這種辦法就相對一勞永逸了,因為每次服務端的啟動都是以配置文件為基礎的,所以slowlog日志會默認以.conf文件中的設置為標准。
即使這樣,當做一些測試的時候,個人比較喜歡直接在交互模式下修改,交互模式下修改可以在當前的狀態下和以后開啟redis客戶端(在服務端還沒重啟的條件下)都會執行慢查詢日志的記錄功能。而如果在.conf文件中修改配置項,那么需要重新啟動redis服務器,來使這個功能生效,下次需要修改配置,還得到.conf文件來重新配置。
為更完整描述配置文件過程,我這里寫一下如何在.conf文件中如何修改配置項
windows操作系統下用記事本,linux操作系統下用sublim text 或者vim打開。找到
對應下面就會找到配置選項了
那么接下來,如何查看慢查詢呢?
又是進入交互模式下,命令很簡單。
SLOWLOG GET
(當然也可以用小寫,redis客戶端對大小寫沒有太嚴格的限制)
以windows為例查看記錄如下
為了方便解說,我設置超時時間為0毫秒,日志記錄為1條
那么記錄的中的1)2)3)4)分別表示什么呢?
1)表示日志唯一標識符uid
2)命令執行時系統的時間戳
3)命令執行的時長,以微妙來計算
4)命令和命令的參數
做日志查詢的時候,可以通過3)來查看是具體的命令運行時間(注意:再強調一次,時間的單位是微妙,但對於一個插入操作來說,10000微妙,也就是10毫秒即0.01秒已經可以算是慢操作了)哪些操作出了問題。當然這只限於測試使用,如果需要當業務出現redis插入查詢緩慢的事件,需要去查看redis生成的持久型日志,這需要額外去配置一些內容,其中涉及到了集群和分布式,這里先點到為止。
筆者希望自己往后有更深刻的認識的時候再來寫一遍相關的文章。