整個緩存的技術方案,分成兩種類型將。
-
實時性比較高數據
,比如說庫存,銷量之類的這種數據,我們採取的實時的緩存+數據庫雙寫
的技術方案,雙寫一致性保障的方案 -
實時性要求不高數據
,比如說商品的基本信息,等等,我們採取的是三級緩存架
構的技術方案,就是說由一個專門的數據生產的服務,去獲取整個商品詳情頁需要的各種數據,經過處理後,將數據放入各級緩存中,每一級緩存都有自己的作用
商品詳情頁分析
實時性要求不高的數據,大型電商網站中的商品詳情頁的數據結構分析
- 商品的基本信息
標題:【限時直降】Apple/蘋果 iPhone 7 128G 全網通4G智能手機正品
短描述:限時優惠 原封國行 正品保障
顏色:
存儲容量
圖片列表
規格參數
其他信息:店鋪信息,分類信息,等等,非商品維度的信息
- 商品介紹:放緩存,看一點,ajax異步從緩存加載一點
- 實時信息:實時廣告推薦、實時價格、實時活動推送,等等,ajax加載
將商品的各種基本信息,分類放到緩存中,每次請求過來,動態從緩存中取數據,然後動態渲染到模板中
- 數據放緩存,性能高,動態渲染模板,靈活性好
大型緩存全量更新問題
- 網絡耗費的資源大
- 每次對redis都存取大數據,對redis的壓力也比較大
- redis的性能和吞吐量能夠支撐到多大,基本跟數據本身的大小有很大的關係
- 如果數據越大,那麼可能導致redis的吞吐量就會急劇下降
緩存維度化解決方案
- 維度:商品維度,商品分類維度,商品店鋪維度。
- 不同的維度,可以看做是不同的角度去觀察一個東西,那麼每個商品詳情頁中,都包含了不同的維度數據
- 如果不維度化,就導致多個維度的數據混合在一個緩存value中
- 但是不同維度的數據,可能更新的頻率都大不一樣
- 比如說,現在只是將1000個商品的分類批量調整了一下,但是如果商品分類的數據和商品本身的數據混雜在一起
- 那麼可能導致需要將包括商品在內的大緩存value取出來,進行更新,再寫回去,耗費大量的資源,redis壓力也很大
- 但是如果我們隊對緩存進行維度化,那麼在不同的維度數據更新的時候,只要去更新對應的維度就可以了
維度化
:將每個維度的數據都存一份,比如說商品維度的數據存一份,商品分類的數據存一份,商品店鋪的數據存一份
- 包括之前那種實時性較高的數據,也可以理解爲一個維度,那麼維度拆分後