1. 程式人生 > >Redis效能調優建議

Redis效能調優建議

一、 Redis部署結構優化建議

1. Master不做AOF或RDB持久化,Slave做AOF持久化,建議同時做RDB持久化
2. 所有Master全部增加Slave
3. Master掛載Slave不超過2個,採用M-S-S方式掛載。若想保證高可用,即主從切換,可採用Keepalived機制.

備註:以上是基於Redis部署結構不合理提出的建議,同時也參考了新浪微博、淘寶架構中Redis優化方案給出

二、 Redis配置優化建議

1.tcp-keepalive 60 
阻止由於某個command執行過長達到timeout超時時間而被斷開連線,且可以提高連線錯誤的檢測.
2.stop-writes-on-bgsave-error no
當bgsave快照操作出錯時停止寫資料到磁碟,這樣後面寫操作均會失敗,為了不影響後續寫操作,故需將該項值改為no.
3.rdbchecksum no
檢查RDB資料的正確性,會犧牲10%的效能,故建議關閉.
4.auto-aof-rotate-max-size  20gb
auto-aof-rotate-max-total 4
auto-aof-rewrite-percentage 0 (關閉rewrite模式)
將AOF rewrite模式改為rotate模式,即將AOF線上實時Rewrite的功能,切換到線下操作,1
份AOF檔案切割成多份(類似日誌切割),這樣提升了redis效能的同時提升記憶體的利用率.
5.no-appendfsync-on-rewrite  yes
避免新修改資料刷磁碟時出現IO阻塞

備註:以上是基於Redis配置不合理提出的優化建議

三、 系統核心配置優化建議

1.開啟了AOF模式,為了緩解IO阻塞
編輯/etc/sysctl.conf ,新增如下配置:

vm.dirty_background_ratio = 5
vm.dirty_ratio = 10

然後sysctl -p 使配置檔案生效.

2.開啟了RDB模式,為了避免Fork失敗

編輯/etc/sysctl.conf ,改vm.overcommit_memory=1,
然後sysctl -p 使配置檔案生效

備註:以上是基於測試結果給出的系統核心優化建議

後續計劃:

以上是從架構角度提出的優化建議,後續會從業務角度,分析記憶體型別是否合理、冷熱資料劃分是否合理等

備註:
關於冷熱資料劃分,可使用如下Redis命令進行統計分析:

OBJECT REFCOUNT 該命令主要用於除錯(debugging),它能夠返回指定key所對應value被引用的次數.

OBJECT ENCODING 該命令返回指定key對應value所使用的內部表示(representation)(譯者注:也可以理解為資料的壓縮方式).

OBJECT IDLETIME 該命令返回指定key對應的value自被儲存之後空閒的時間,以秒為單位(沒有讀寫操作的請求) ,這個值返回以10秒為單位的秒級別時間,這一點可能在以後的實現中改善