架構設計——緩存:緩存的原理與應用

網站訪問特點和現實世界的財富分配一樣遵循二八定律:80%的業務訪問集中在20%的數據上。既然大部分的業務訪問集中在一小部分數據上,那麼就可以把這一小部分數據緩存在內存中,可以減少數據庫的訪問壓力,提高整個網站的數據訪問速度,改善數據的寫入性能。

網站性能優化第一定律:優先考慮使用緩存優化性能

本文參照:
《大型數據技術架構——核心原理與案例分析》 ——李智慧
《億級流量網站架構核心技術》 ——張開濤
極客時間:《左耳聽風》——64:性能設計篇之"緩存"

緩存無處不在

在整個網站應用中,緩存幾乎無處不在,既存在於瀏覽器,也存在於應用服務器和數據庫服務器;既可以對數據緩存,也可以對文件緩存,還可以對頁面片段緩存。
在這裏插入圖片描述

  • CDN:英文全稱爲content delivery network,即內容分發網絡,部署在距離終端用戶最近的網絡服務商,用戶的請求總是最先達到他的網絡服務商那裏,將網站的一些靜態資源緩存在這裏,可以就近以最快的速度返回給用戶。如視頻網站和用戶網站會將用戶訪問量大的熱點內容部署在CDN。

  • 反向代理:屬於網站前端架構的一部分,部署在網站的前端,當用戶請求到達網站的數據中心時,最先訪問到的就是反向代理服務器,這裏緩存網站的靜態資源,無需將請求繼續轉發給應用服務器就能返回給用戶。

  • 本地緩存:在應用服務器本地緩存熱點數據,應用可以直接在本機內存中訪問數據,無需訪問數據庫。

  • 分佈式緩存:本地緩存受到應用服務器內存限制,其緩存數量有限,而且會出現和應用程序競爭內存的情況。將數據緩存在分佈式緩存集羣中,應用程序通過網絡通信訪問緩存數據。

在這裏插入圖片描述

什麼樣的數據需要緩存

  • 數據訪問熱點不均勻:某些數據會被更頻繁地訪問,這些數據應該放在緩存中;
  • 不會很快過期:數據在某個時間段內有效,不會很快過期,否則緩存的數據就會因爲失效而產生髒讀,影響結果的正確性。

緩存的基本原理

緩存是指將數據存儲在相對較高訪問速度的存儲介質中,以供系統處理。

緩存的本質是一個內存Hash表,Hash表數據讀寫的時間複雜度是O(1),下圖是一對Key、Value在Hash表中的存儲。

計算Key的HashCode對應的Hash表索引,可以快速訪問Hash表中的數據。通過HashCode值可以得到Hash表的索引下標,最簡單的就是餘數法,使用Hash表數組長度對HashCode求餘,餘數即爲Hash表索引。
在這裏插入圖片描述
緩存主要用來存放那些讀寫比很高、很少變化的數據。如商品的類目信息,熱門詞的搜索列表信息,熱門商品信息等。

緩存失效策略\緩存淘汰算法

當緩存需要被清理時(比如空間佔用已經接近臨界值了),需要使用某種淘汰算法來決定清理掉哪些數據。常用的淘汰算法有下面幾種:

  1. FIFO:First In First Out,先進先出。判斷被存儲的時間,離目前最遠的數據優先被淘汰。
  2. LRU:Least Recently Used,最近最少使用。判斷最近被使用的時間,目前最遠的數據優先被淘汰(淘汰最近不使用的頁面)。
  3. LFU:Least Frequently Used,最不經常使用(最近使用次數最少)。在一段時間內,數據被使用次數最少的,優先被淘汰( 淘汰使用次數最少的頁面)。

https://www.cnblogs.com/s-b-b/p/6047954.html

LRU的實現思路

最常見的實現是使用一個鏈表保存緩存數據,詳細算法實現如下:

  1. 新數據插入到鏈表頭部;
  2. 每當緩存命中(即緩存數據被訪問),則將數據移到鏈表頭部;
  3. 當鏈表滿的時候,將鏈表尾部的數據丟棄。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章