本地快取需要高時效性怎麼辦 快取架構之多級快取

2021-10-14 07:29:41 字數 1257 閱讀 5605

我們之前在快取架構之redis中,主要講解的是redis是如何支援高併發的,它的內部原理的基本思路等。在乙個高併發的系統中,redis就是底層的快取儲存的支援,可以說是重中之重。 但是不要以為,做個快取,就是用一下redis就夠了,簡單的快取系統,那麼做自然ok,但是在複雜的高併發情況的,遇到的問題非常多,絕不是簡單的訪問一下redsi就可以了。
nginx本地快取,抗的是熱資料的高併發訪問。我們以電商為例,一般來講,商品的購買總是有熱點的,比如訪問某些知名品牌的次數會比小眾品牌次數多。這些熱資料,由於經常被訪問,我們可以利用nginx本地快取。由於nginx本地記憶體有限,我們只cache住部分熱資料,其餘不怎麼熱的資料,流量可以走redis。

redis大規模分布式快取集群,抗的是很高的離散訪問,支撐海量的資料,高併發的訪問,提供高可用的服務。

tomcat 的jvm堆記憶體快取,主要是抗redis大規模災難(比如雪崩),如果redis出現了大規模的宕機,導致nginx大量流量直接湧入資料生產服務,那麼最後的tomcat堆記憶體快取至少可以再抗一下,不至於讓資料庫直接裸奔。同時tomcat jvm堆記憶體快取,也可以抗住redis沒有cache住的最後那少量的部分快取。

我們以常見的電商庫存為例,一般來講,顯示的庫存,是時效性要求相對較高一些(相比於商品基本資訊,顏色、日期什麼的)。我們希望當庫存變化的時候,盡可能更快將庫存顯示到頁面上去,而不是說等了很長時間,庫存才反應到頁面上去。

對於庫存這種時效性要求高的資料,當相關的服務系統每次發生了變更的時候,直接採取資料庫和redis快取雙寫的方案,這樣快取的時效性最高。

商品基本資訊等時效性不高的資料,而且種類繁多,來自多種不同的系統,採取mq非同步通知的方式,寫乙個資料生產服務,監聽mq訊息,然後非同步拉取服務的資料,更新tomcat jvm快取+redis快取

nginx+lua指令碼做頁面動態生成的工作,每次請求過來,優先從nginx本地快取中提取各種資料,結合頁面模板,生成需要的頁面。

如果nginx本地快取過期了,那麼就從nginx到redis中去拉取資料,更新到nginx本地。

如果redis中也被lru演算法清理掉了,那麼就從nginx走http介面到後端的服務中拉取資料,資料生產服務中,現在本地tomcat裡的jvm堆快取中找,ehcache,如果也被lru清理掉了,那麼就重新傳送請求到源頭的服務中去拉取資料,然後再次更新tomcat堆記憶體快取+redis快取,並返回資料給nginx,nginx快取到本地。

本地快取需要高時效性怎麼辦 瀏覽器快取機制

瀏覽器快取策略分為兩種 強快取協商快取 相同點 如果命中,都是從快取中載入資源 不同點 協商快取會向伺服器發起請求去驗證是否命中快取,而強快取不需要傳送請求 expires是http 1.0控制網頁快取的字段,其值是伺服器返回改請求結果快取的到期時間,是個絕對時間。expires控制快取的原理,是使...

為什麼需要快取記憶體

title 為什麼需要快取記憶體 categories 深入理解計算機系統 我們知道,如果要執行乙個程式,首先得將乙個可執行檔案載入到記憶體當中。那麼問題來了,假如我程式中是要對乙個陣列進行操作,而我陣列的資料又是放在記憶體上的,那麼cpu對每乙個元素進行操作的時候,都要先把資料載入到暫存器上,對暫...

美國是否需要高鐵

現在哪個城市如果沒有通高鐵,都天天盼望著。為什麼呢?乙個字,速度快。因為速度快,體驗就非常好了。這個咱們不用多說。其實當初要搞高鐵,決策層是不願意的。為什麼呢?覺得沒有必要。後來搞了曲線策略,先修城際高鐵,再鼓吹其好處。於是開始大規模修建。中國高鐵這麼好,那麼外國是否需要?按照慣例,所謂外國,都是指...