**訪問特點和現實世界的財富分配一樣遵循二八定律:80%的業務訪問集中在20%的資料上。既然大部分的業務訪問集中在一小部分資料上,那麼就可以把這一小部分資料快取在記憶體中,可以減少資料庫的訪問壓力,提高整個**的資料訪問速度,改善資料的寫入效能。
在整個**應用中,快取幾乎無處不在,既存在於瀏覽器,也存在於應用伺服器和資料庫伺服器;既可以對資料快取,也可以對檔案快取,還可以對頁面片段快取。
反向**:屬於**前端架構的一部分,部署在**的前端,當使用者請求到達**的資料中心時,最先訪問到的就是反向**伺服器,這裡快取**的靜態資源,無需將請求繼續**給應用伺服器就能返回給使用者。
本地快取:在應用伺服器本地快取熱點資料,應用可以直接在本機記憶體中訪問資料,無需訪問資料庫。
分布式快取:本地快取受到應用伺服器記憶體限制,其快取數量有限,而且會出現和應用程式競爭記憶體的情況。將資料快取在分布式快取集群中,應用程式通過網路通訊訪問快取資料。
快取是指將資料儲存在相對較高訪問速度的儲存介質中,以供系統處理。
快取的本質是乙個記憶體hash表,hash表資料讀寫的時間複雜度是o(1),下圖是一對key、value在hash表中的儲存。
計算key的hashcode對應的hash表索引,可以快速訪問hash表中的資料。通過hashcode值可以得到hash表的索引下標,最簡單的就是餘數法,使用hash表陣列長度對hashcode求餘,餘數即為hash表索引。
快取主要用來存放那些讀寫比很高、很少變化的資料。如商品的類目資訊,熱門詞的搜尋列表資訊,熱門商品資訊等。
當快取需要被清理時(比如空間占用已經接近臨界值了),需要使用某種淘汰演算法來決定清理掉哪些資料。常用的淘汰演算法有下面幾種:
fifo:first in first out,先進先出。判斷被儲存的時間,離目前最遠的資料優先被淘汰。
lru:least recently used,最近最少使用。判斷最近被使用的時間,目前最遠的資料優先被淘汰(淘汰最近不使用的頁面)。
lfu:least frequently used,最不經常使用(最近使用次數最少)。在一段時間內,資料被使用次數最少的,優先被淘汰( 淘汰使用次數最少的頁面)。
最常見的實現是使用乙個鍊錶儲存快取資料,詳細演算法實現如下:
新資料插入到鍊錶頭部;
每當快取命中(即快取資料被訪問),則將資料移到鍊錶頭部;
當鍊表滿的時候,將鍊錶尾部的資料丟棄。
快取架構設計
快取架構設計 需求分析 快取是一種提高系統讀效能的常見技術,對於讀多寫少的應用場景,我們經常使用快取來進行優化。例如對於使用者的餘額資訊表account uid,money 業務上的需求是 查詢使用者的餘額,select money from account where uid 佔99 的請求 更改...
快取架構設計
1 快取技術和框架的重要性 網際網路的一些高併發,高效能的專案和系統中,快取技術是起著功不可沒的作用。快取不僅僅是key value的簡單訪問,它在具體的業務場景中,還是很複雜的,需要很強的架構設計能力。我曾經就遇到過因為快取架構設計不到位,導致了系統崩潰的案例。2 快取的技術方案分類 1 是做實時...
快取架構設計細節二三事
本文主要討論這麼幾個問題 1 快取與資料庫 需求緣起 2 淘汰快取 還是 更新快取 3 快取和資料庫的操作時序 4 快取和資料庫架構簡析 一 需求緣起 場景介紹 快取是一種提高系統讀效能的常見技術,對於讀多寫少的應用場景,我們經常使用快取來進行優化。例如對於使用者的餘額資訊表account uid,...