Redis 不能不瞭解的小功能(一)

注:我在開源中國的博客不用了,對開源中國的技術支持喪失信心了,開始轉投segmentfault了
此爲原文,轉載請註明出處:https://segmentfault.com/a/11...mysql

redis有不少小功能,可是很實用。咱們來介紹幾個。redis

慢查詢

許多存儲系統都提供慢查詢日誌來幫助開發運維人員定位問題,好比mysql。慢查詢日誌就是系統計算每條命令的執行時間,當執行時間超過必定的閾值,就將這條命令的相關信息記錄下來,redis也提供了相似的功能。sql

這裏列出一個圖簡單表述一個redis命令的生命週期:
圖片描述segmentfault

須要注意的是,慢查詢只統計命令命令執行的過程,網絡傳輸等並不統計,因此若是說沒有慢查詢並不表明客戶端沒有超時的問題。網絡

那麼回到慢查詢,這個東西如何配置,又存放在哪裏?
redis提供幾個配置,slowlog-log-slower-than 和 slowlog-max-len。併發

從字面上能夠看出slowlog-log-slower-than就是以前提到的閾值,單位是微秒,默認是10000微秒也就是10ms。也就說若是一條命令執行時間超過10ms,就會被記錄在慢日誌中。那爲何10ms也算慢查詢?在高併發得環境下,redis能夠執行每秒幾萬的命令,10ms其實在這種環境下已經算是比較高的了。設置有些高要求的系統不能容忍。運維

而另外一個參數, slowlog-max-len的用處是設置存儲慢日誌多少條。redis其實用一個列表在內存中保存慢日誌。當慢日誌列表已經達到最大的條數的時候,最先插入的那一條將被從列表移出。高併發

配置這兩個參數能夠修改配置文件,能夠再redis-cli中使用config set命令設置。spa

若是要將上面提到的方式配置的參數持久化到本地配置文件,能夠執行config rewrite命令。日誌

查詢慢日誌的命令:

slowlog get [n]其中n表明要查看多少條慢日誌。

圖片描述

一條慢日誌通常都會有前4個屬性,到了redis4.0以上版本出現了後面兩個屬性。
查看慢日誌的條數:

slowlog len

慢日誌重置:
slowlog reset

慢查詢可以有效幫助我慢找到redis的問題,但在實際使用中有幾個建議:

  1. slowlog-max-len配置建議:這個配置默認是128,線上能夠調大,設置過小,可能比較重要的慢日誌會被新的慢日誌替換掉。線上能夠設置1000以上,並不會佔用大量內存。
  2. slowlog-log-slower-than配置建議: 這個配置默認爲10ms,須要根據併發量來肯定,對於高流量高併發得場景,若是命令執行時間超過1ms以上,那麼也就是說此時的redis最多支撐1000 ops。所以對於這種場景應設置爲1ms。
  3. 慢查詢統計只是命令執行時間,命令排隊時間和網絡傳輸時間並不包括,從客戶端看,執行命令返回的時間確定要比實際在redis執行命令的時間長。
  4. 慢查詢日誌是在內存中,新的日誌會覆蓋之前的日誌,若是想要看之前的日誌,須要按期將日誌保存出來。好比按期執行slowlog get命令,而後倒入到關係型數據,以便於之後查詢。redis的私有云CacheCloud就提供了這樣的功能。

今天就到這裏,有時間我會再介紹其餘實用的小功能。

相關文章
相關標籤/搜索