Redis混合存儲產品是阿里雲自主研發的徹底兼容Redis協議和特性的混合存儲產品。html
經過將部分冷數據存儲到磁盤,在保證絕大部分訪問性能不降低的基礎上,大大下降了用戶成本並突破了內存對Redis單實例數據量的限制。算法
其中,對冷熱數據的識別和交換是混合存儲產品性能的關鍵因素。架構
在Redis混合存儲中,內存和磁盤的比例是用戶能夠自由選擇的:異步
Redis混合存儲實例將全部的Key都認爲是熱數據,以少許的內存爲代價保證全部Key的訪問請求的性能是高效且一致的。而對於Value部分,在內存不足的狀況下,實例自己會根據最近訪問時間,訪問頻度,Value大小等維度選取出部分value做爲冷數據後臺異步存儲到磁盤上直到內存小於制定閾值爲止。性能
在Redis混合存儲實例中,咱們將全部的Key都認爲是熱數據保存在內存中是出於如下兩點考慮:測試
所以,Redis混合存儲實例的適用場景主要有如下兩種:阿里雲
當內存不足時的狀況下,實例會按照最近訪問時間,訪問頻度,value大小等維度計算出value的權重,將權重最低的value存儲到磁盤上並從內存中刪除。.net
僞代碼以下:線程
理想的狀況下,咱們固然但願可以準確的計算出當前最冷的value。然而,value的冷熱程度根據訪問狀況動態變化的,每次都從新計算全部value的冷熱權重的時間消耗是徹底不可接受的。htm
Redis自己在內存滿的狀況下會根據用戶設置的淘汰策略淘汰數據,而熱數據從內存寫到磁盤也能夠認爲是一種「淘汰」的過程。從性能,準確率以及用戶理解程度考慮,咱們在冷熱數據識別時採用和Redis相似的近似計算方法,支持多種策略, 經過隨機採樣小部分數據來下降CPU和內存消耗,經過eviction pool利用採樣歷史信息來輔助提升準確率。
上圖爲不一樣版本和不一樣採樣樣本數目配置下,Redis近似淘汰算法的命中率示意圖。王世傑淺灰色的點爲被淘汰數據,灰色的點爲未淘汰數據,綠色點爲測試過程當中新加入的數據。
Redis混合存儲在冷熱數據交換過程在後臺IO線程中完成。
熱數據->冷數據
異步方式:
若是寫入流量過大,異步方式來不及換出數據,致使內存超出最大規格內存。主線程將直接執行數據換出任務,達到變相限流的目的。
冷數據->熱數據
異步方式:
在Lua腳本,具體命令執行階段,若是發現有value存儲在磁盤上,主線程將直接執行數據加載任務,保證Lua腳本和命令的語義不變。
Redis混合存儲型實例簡介
Redis混合存儲產品與架構介紹
做者:懷聽
文章來源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/81091547