基於Nginx+Redis+jvm堆緩存的多級緩存架構設計

一、多級緩存架構nginx

採用三級緩存:nginx本地緩存+redis分佈式緩存+tomcat堆緩存的多級緩存架構

2.緩存中的數據分爲兩種redis

(1).時效性要求很是高的數據:庫存、價格等 通常來講,顯示的庫存,都是時效性要求會相對高一些,由於隨着商品的不斷的交易,庫存會不斷的變化。固然,咱們就但願當庫存變化的時候,儘量更快將庫存顯示到頁面上去,而不是說等了很長時間,庫存才反應到頁面上去 (2).時效性要求不高的數據:商品的基本信息(名稱、顏色、版本、規格參數,等等) 時效性要求不高的數據,就還好,好比說你如今改變了商品的名稱,稍微晚個幾分鐘反應到商品頁面上,也還能接受 商品價格/庫存等時效性要求高的數據,採起相關的服務系統每次發生了變動的時候,直接採起數據庫和redis緩存雙寫的方案,這樣緩存的時效性最高 商品基本信息等時效性不高的數據,來自多種不一樣的系統,採起MQ異步通知的方式,寫一個數據生產服務,監聽MQ消息,而後異步拉取服務的數據,更新tomcat jvm緩存+redis緩存 

3.多級緩存架構的工做流程算法

每次請求過來,優先從nginx本地緩存中提取各類數據(這裏nginx+lua腳本作頁面動態生成的工做),結合頁面模板,生成須要的頁面
若是nginx本地緩存過時了,那麼就從nginx到redis中去拉取數據,更新到nginx本地
若是redis中也被LRU算法清理掉了,那麼就從nginx走http接口到後端的數據生產服務中拉取數據,在數據生產服務中先在本地tomcat裏的jvm堆緩存中找,好比ehcache中,若是ehcache中的數據也被LRU清理掉了,那麼就從新發送請求數據庫拉取數據,而後再次更新tomcat堆內存緩存+redis緩存,並返回數據給nginx,而且nginx將數據緩存到本地 

4.多級緩存架構中每一層的意義數據庫

nginx本地緩存,主要是針對熱數據的高併發訪問,通常來講,商品的購買老是有熱點的,好比天天購買iphone、小米等知名品牌的東西的人老是比較多的,這些熱數據因爲常常被訪問,因此能夠被鎖定在nginx的本地緩存內,那麼對這些熱數據的大量訪問,就直接走nginx就能夠了,不須要走後續的各類網絡開銷了 redis分佈式大規模緩存,主要是針對大規模的離散訪問,它提供海量的數據支撐、高併發的訪問、高可用的服務,因爲redis緩存最大量的數據,最完整的數據,所以爲數據庫提供了一層強有力的保護傘 nginx本地內存有限,也就能緩存部分的熱數據,除了各類iphone、小米等熱數據,其餘相對不那麼熱的數據,流量會常常走到redis那裏 jvm堆內存緩存,主要是針對redis大規模災難的,若是redis出現了大規模的宕機,致使nginx大量流量直接涌入數據生產服務,那麼最後的tomcat堆內存緩存至少能夠再扛一下,不至於讓數據庫直接裸奔形成雪崩效應 
相關文章
相關標籤/搜索