或多或少,你們可能聽過 MySQL 的慢查詢日志。其實 Redis 也有,而且 Redis 的慢查詢日志對性能的影響很小,因為它就保存在內存中。
slowlog 是 Redis 用來記錄查詢執行時間的日志系統。注意,這個查詢執行時間指的是不包括像客戶端響應(talking)、發送回復等 IO 操作,而單單是執行一個查詢命令所耗費的時間。
slowlog 保存在內存里面,讀寫速度非常快,因此我們可以放心地使用它,不必擔心因為開啟 slowlog 而損害 Redis 的速度。
slowlog 有兩個重要的配置,我們先通過 CONFIG GET slowlog-* 命令來查看現有的配置。
1 2 3 4 5 |
|
slowlog-log-slower-than 代表慢查詢的閾值,單位為:微秒。當執行查詢命令消耗時間大於配置的閾值時,會將該條命令記錄到慢查詢日志。當 slowlog-log-slower-than=0 時,記錄所有命令。slowlog-log-slower-than<0 時,不記錄任何命令。slowlog-log-slower-than 的默認值為 10000 (10毫秒,1秒 = 1,000毫秒 = 1,000,000微秒)。
slowlog-max-len 代表慢查詢日志最大條數。它是一個隊列形式的存儲結構,先進先出的隊列,即當慢查詢日志達到最大條數后,會銷毀最早記錄的日志條目。slowlog-max-len 的默認值為 128,保存在內存內,所以重啟 redis 會清空慢查詢日志。
配置 slowlog-log-slower-than 和 slowlog-max-len 的命令非常簡單,如下:
1 2 |
|
使用 SLOWLOG LEN 命令,查詢當前的慢查詢日志記錄數。
1 2 |
|
當我們只需要查詢前幾個慢查詢記錄時,可以使用 SLOWLOG GET [n] 命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
SLOWLOG GET [n] 若不加 n ,則獲取全部慢查詢記錄。
清空慢查詢日志使用 SLOWLOG RESET。注意,slowlog-log-slower-than 不要設置過大,設置過大有可能一條記錄也不會記錄。
參考地址 :
https://www.xttblog.com/?p=3708
https://www.runoob.com/redis/keys-scan.html
https://www.runoob.com/redis/sets-smembers.html