Intro
可能有一些命令需要很長時間才能在redis服務(wù)器上處理,導(dǎo)致請求超時肉津。 長時間運行的命令的很少例子有 mget有大量的鍵舱沧,鍵*或?qū)懙貌缓玫膌ua腳本。 可以運行通過 SlowLog 命令查看是否有請求花費比預(yù)期更長的時間距糖。
Redis 慢日志概覽
Redis Slow Log
是一個系統(tǒng),用于記錄超過指定執(zhí)行時間的查詢悍引。執(zhí)行時間不包括I / O操作趣斤,如與客戶端交談,發(fā)送回復(fù)等等浓领,但只是實際執(zhí)行命令所需的時間(這是執(zhí)行命令的唯一階段,其中線程被阻止并且不能同時服務(wù)于其他請求)壮啊。
您可以使用兩個參數(shù)配置慢日志:
-
slowlog-log-slow-than
告訴 Redis 為了記錄命令撑蒜,執(zhí)行時間(微秒)超過了多少。請注意狸眼,負數(shù)將禁用慢日志浴滴,而值為零將強制記錄每條命令。
slowlog-max-len
是慢日志的長度升略。最小值為零品嚣。當(dāng)記錄新的命令并且慢日志已經(jīng)處于其最大長度時,為了留出空間翰撑,將最老的命令從記錄的命令隊列中移除。
配置可以通過編輯 redis.conf
或服務(wù)器運行時使用 CONFIG GET
和 CONFIG SET
命令來完成涨醋。
查看慢日志
慢日志在內(nèi)存中累積逝撬,因此沒有寫入關(guān)于慢命令執(zhí)行信息的文件。這使得日志記錄非乘菥快,可以啟用所有命令的日志記錄(將slowlog-log-slow- config
配置參數(shù)設(shè)置為零)愧膀,同時影響較小谣光。
要讀取慢日志,使用SLOWLOG GET
命令蟀悦,該命令將返回慢日志中的每個條目氧敢。可以僅返回N個最近的條目浙炼,并將其他參數(shù)傳遞給該命令(例如SLOWLOG GET 10
)唯袄。
請注意,為了讀取慢日志輸出资厉,您需要使用 redis-cli
的最新版本蔬顾,因為它使用了以前在 redis-cli
中執(zhí)行的一些協(xié)議功能(深度嵌套的多批量響應(yīng))
輸出格式
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時間戳窄刘。
- 執(zhí)行所需的時間量舷胜,以微秒為單位。
- 組成命令參數(shù)的數(shù)組欺矫。
該條目的唯一ID可用于避免多次處理緩慢的日志條目(例如展氓,您可能有一個腳本為每個新的慢日志條目發(fā)送電子郵件警報)。
在 Redis 服務(wù)器執(zhí)行過程中未妹,ID永遠不會被重置,只有服務(wù)器重啟才會重置它络它。
獲取慢日志的當(dāng)前數(shù)量
使用命令 SLOWLOG LEN
可以獲得慢日志的長度 。
重置慢日志
你可以使用 SLOWLOG RESET
命令重置慢日志单料。一旦刪除点楼,信息將永遠丟失。