天天看點

Redis 混合存儲最佳實踐指南

Redis 混合存儲執行個體

是阿裡雲自主研發的相容Redis協定和特性的雲資料庫産品,混合存儲執行個體突破 Redis 資料必須全部存儲到記憶體的限制,使用磁盤存儲全量資料,并将熱資料緩存到記憶體,實作通路性能與存儲成本的完美平衡。

架構及特性

Redis 混合存儲最佳實踐指南

指令相容

混合存儲相容絕大多數 Redis 指令,與原生 Redis 相比,如下指令不支援或受限制;不支援的主要原因是考慮到性能,如業務中有使用到,請送出工單。

Keys(鍵) List(連結清單) Scripting(Lua腳本)
RENAME LINSERT SCRIPT 不支援LOAD和DEBUG子指令
RENAMENX LREM
MOVE
SWAPDB
SORT 不支援STORE選項

選型指南 - 場景

Redis 混合存儲最佳實踐指南

選型指南 - 規格

選擇混合存儲執行個體時,需要選擇合适的【記憶體配置 + 磁盤配置】;磁盤決定能存儲的資料總量,記憶體決定能存儲的熱資料總量,執行個體生産時會根據存儲的規格配置選擇合适的CPU資源配置,目前暫不支援自定義CPU核數。

比如【64GB記憶體 + 256GB磁盤】執行個體,意思是執行個體最多能存儲 256GB 的資料(以KV存儲引擎的實體檔案總大小為準),其中 64GB 資料可以緩存在記憶體。

記憶體選型建議:Redis 混合存儲為保證最大程度的相容 redis 原生通路協定,要求所有的key必須常駐記憶體,value 可以根據冷熱讀來自動決定存儲在記憶體還是磁盤,是以記憶體空間必須要足以存儲所有的key、以及對應的元資訊。

key數量 推薦記憶體規格(越大性能越好)
小于 2000萬 64GB、32GB、16GB
2000萬 ~ 5000萬 64GB、32GB
5000萬 ~ 1億 128GB、64GB、32GB
大于 1億 128GB、64GB

磁盤選型建議:因 Redis 資料存儲到 KV 存儲引擎,每個key都會額外中繼資料資訊,存儲空間占用會有一定的放大,建議在磁盤空間選擇上,留有适當餘量,按實際存儲需求的 1.2 - 1.5倍預估。

案例1:使用者A 使用 Redis Cluster 存儲了 100GB 的資料,總的通路QPS不到2W,其中80%的資料都很少通路到。使用者A 可以使用 【32GB記憶體 + 128GB磁盤】 混合存儲執行個體,節省了近 70GB 的記憶體存儲,存儲成本下降50%+。

案例2:使用者B 在IDC自建 Pika/SSDB 執行個體,解決Redis存儲成本高的問題,存儲了約 400GB 的資料,其中活躍通路的在10%左右,叢集運維負擔很重,想遷移至雲資料庫;使用者B 可以使用 【64GB記憶體 + 512GB磁盤】混合存儲執行個體,來保證免運維的同時,服務品質不下降。

性能名額

Redis 混合存儲的性能與記憶體磁盤配比,以及業務的通路高度相關;根據規格配置及業務通路模式的不同,簡單 set/get 的性能可在幾千到數萬之間波動。最好情況所有的通路都記憶體命中,性能與 Redis 記憶體版基本一緻;最差情況所有的通路都需要從磁盤讀取。

測試場景:2000w key,value大小為1KB,25%的熱key能存儲在記憶體,get 請求測試資料如下

測試集 記憶體版(100%資料在記憶體) 混合存儲版(25%資料在記憶體)
随機通路 12.3(萬) 1.5
高斯分布80%的機率通路20%的key 12.0 5.4
高斯分布99%的機率通路1%的key 13.5 11.4

應用場景

視訊直播類

視訊直播類業務往往存在大量熱點資料,大部分的請求都來自于熱門的直播間。使用 Redis 混合存儲型執行個體,記憶體中保留熱門直播間的資料,不活躍的直播間資料被自動存儲到磁盤上,可以達到對有限記憶體的最佳利用效果。

電商類

電商類應用有大量的商品資料,新上架的商品會被頻繁通路,而較老的商品通路熱度不高;使用 Redis 混合存儲型執行個體,可以輕松突破記憶體容量限制,将大量的商品資料存儲到磁盤,在正常業務請求中,活躍的商品資料會逐漸緩存在記憶體中,以最低的成本滿足業務需求。

線上教育類

線上教育類的場景,有大量的課程、題庫、師生交流資訊等資料,通常隻有熱門課程、最新題庫題庫會被頻繁通路; 使用 Redis 混合存儲型,将大量的課程資訊存儲到磁盤,活躍的課程、題庫資訊會換入到記憶體并常駐記憶體,保證高頻通路資料的性能,實作性能與存儲成本的平衡。

其他場景

其他資料通路有明顯冷熱特性,對性能要求不高的場景均可使用Redis混合存儲來降低存儲成本。

常見問題

磁盤還有剩餘空間,但記憶體先滿了,導緻寫入報錯 OOM error

  • 記憶體規格太小,導緻記憶體空間不足以容納所有key及其中繼資料資訊,建議在控制台更新執行個體規格即可,增大執行個體記憶體。
  • key對應的value比較小,混合存儲對于比較小的value(比如小于20byte),不會觸發換出換出到磁盤,因為小的value換出到磁盤,在記憶體裡還是會存儲一些meta資訊,最終導緻換出到磁盤并不能騰出記憶體空間;這個問題混合存儲核心在持續優化,盡量适應更多的應用場景。
Redis 混合存儲最佳實踐指南
雲資料庫 Redis 版

一種穩定可靠、性能卓越、可彈性伸縮的資料庫服務。基于飛天分布式系統和全SSD盤高性能存儲,支援主備版和叢集版兩套高可用架構。

了解更多

繼續閱讀