Intro
可能有一些命令需要很長時間才能在redis服務器上處理,導致請求超時。 長時間運行的命令的很少例子有 mget有大量的鍵,鍵*或寫得不好的lua腳本。 可以運行通過 SlowLog 命令查看是否有請求花費比預期更長的時間。
Redis 慢日志概覽
Redis Slow Log 是一個系統,用於記錄超過指定執行時間的查詢。執行時間不包括I / O操作,如與客戶端交談,發送回復等等,但只是實際執行命令所需的時間(這是執行命令的唯一階段,其中線程被阻止並且不能同時服務於其他請求)。
您可以使用兩個參數配置慢日志:
slowlog-log-slow-than告訴 Redis 為了記錄命令,執行時間(微秒)超過了多少。請注意,負數將禁用慢日志,而值為零將強制記錄每條命令。
slowlog-max-len是慢日志的長度。最小值為零。當記錄新的命令並且慢日志已經處於其最大長度時,為了留出空間,將最老的命令從記錄的命令隊列中移除。
配置可以通過編輯 redis.conf 或服務器運行時使用 CONFIG GET 和 CONFIG SET 命令來完成。
查看慢日志
慢日志在內存中累積,因此沒有寫入關於慢命令執行信息的文件。這使得日志記錄非常快,可以啟用所有命令的日志記錄(將slowlog-log-slow- config配置參數設置為零),同時影響較小。
要讀取慢日志,使用SLOWLOG GET命令,該命令將返回慢日志中的每個條目。可以僅返回N個最近的條目,並將其他參數傳遞給該命令(例如SLOWLOG GET 10)。
請注意,為了讀取慢日志輸出,您需要使用 redis-cli 的最新版本,因為它使用了以前在 redis-cli 中執行的一些協議功能(深度嵌套的多批量響應)
輸出格式
redis 127.0.0.1:6379> slowlog get 2 1) 1) (integer) 14 2) (integer) 1309448221 3) (integer) 15 4) 1) "ping" 2) 1) (integer) 13 2) (integer) 1309448128 3) (integer) 30 4) 1) "slowlog" 2) "get" 3) "100"
每個條目由四個字段組成:
- 每個慢日志條目的唯一漸進標識符。
- 處理記錄的命令的UNIX時間戳。
- 執行所需的時間量,以微秒為單位。
- 組成命令參數的數組。
該條目的唯一ID可用於避免多次處理緩慢的日志條目(例如,您可能有一個腳本為每個新的慢日志條目發送電子郵件警報)。
在 Redis 服務器執行過程中,ID永遠不會被重置,只有服務器重啟才會重置它。
獲取慢日志的當前數量
使用命令 SLOWLOG LEN 可以獲得慢日志的長度 。
重置慢日志
你可以使用 SLOWLOG RESET 命令重置慢日志。一旦刪除,信息將永遠丟失。
