快取的意義
快取會將經常存取的資料的可重複使用複本保留在記憶體中,讓應用程式避免重複呼叫資料庫,並更快傳回結果。
快取會將經常存取的資料的可重複使用複本保留在記憶體中,讓應用程式避免重複呼叫資料庫,並更快傳回結果。
大多數系統會保留完整資料集的長期「事實來源」(也稱為資料庫),再為常讀取的暫時性子集保留快取。當要求進來時,應用程式會先檢查快取;如果資料在快取中,就會直接快速回傳,而不會再次查詢後端。開發人員也會快取已處理的資料,並重複使用它來比標準查詢更快地回應要求,這些查詢可能來自關聯式資料庫、SQL 資料庫,或開放原始碼 PostgreSQL 資料庫。
適合快取的資料包括經常重複讀取且變更不頻繁的資料,例如產品和價格資訊,或是建置成本高的共用靜態資源。
如果某項作業會轉換資料或執行複雜計算,快取結果可以避免重複計算後續要求。
開發人員會使用多層快取 (「快取層」),根據需求將不同類型的資料儲存在不同的快取中。新增一個或多個快取層可以改善資料層的輸送量與延遲。
記憶體內部存放區常用來短時間保存大量工作階段資料,例如使用者輸入、購物車項目或個人化喜好設定。對於具狀態應用程式,團隊也會將工作階段狀態儲存在快取中,讓應用程式可以保持無狀態。
快取可以透過幾種具體方式提升效能:
有些系統會使用多層快取 (「快取層」),讓不同類型的資料依需求存在不同的快取中。新增一個或多個快取層可以改善資料層的輸送量與延遲,並透過降低後端負載來減少整體成本。
團隊通常會快取以下幾種類型的資料:
應用程式讀取和寫入快取有幾種標準方法。以下是最常見的模式,以及它們在實務上的意義。
使用快取層可改善輸送量與延遲,因為它會直接從快取服務常見要求,而不是反覆查詢後端存放區。這樣可降低擴充資料庫基礎結構的需求,因為一開始到達資料庫的要求就比較少。
對於使用量會暴增的應用程式,記憶體內部快取可將經常要求的資料保留在更接近使用所在位置,進而降低延遲。
在選擇工作流程時,請先參考以下做法:
快取可提升應用程式效能,因為從記憶體內部快取讀取資料比從磁碟型資料存放區讀取更快。當快取服務更多要求時,系統傳送至後端的查詢就會變少,這可降低擴充資料庫基礎結構的需求,並減少相關成本。
快取有助於減少重複工作。重複讀取或建立成本較高的資料,可以只儲存一次並重複使用。如果某個作業會執行複雜計算或轉換資料,快取結果可減少後續要求的重複計算。
許多網站會快取頁面輸出 (例如 HTML 和用戶端指令碼),讓伺服器不必每次都重新執行頁面程式碼,而是直接回傳快取的輸出。快取也可透過 Web 快取與網路快取支援 Web 多媒體案例,例如內容傳遞網路 (CDN)。
應用程式通常會在快取中儲存暫時性的子集,以便快速擷取,而主要資料庫則會保留完整的長期資料集。將已處理的資料進行快取並重複使用,可以比標準的資料庫查詢更快地回應要求。
團隊通常會新增一或多個快取層,以改善輸送量與延遲,從快取服務常見查詢,並降低資料庫負載。當使用量暴增且輸送量需求提高時,記憶體內部快取可以幫助緩解這些時期的延遲。
快取常用來將大量短期存在的工作階段資料 (例如使用者輸入或個人化喜好設定) 儲存在記憶體內部存放區中。有些團隊也會將工作階段狀態儲存在快取中,讓具狀態應用程式可讓應用程式層保持無狀態。對於作業系統來說,變更不頻繁的資料 (例如產品與價格資訊) 是常見的快取目標。
瀏覽器快取會在使用者裝置上儲存靜態資源的複本,因此再次造訪時可重複使用這些檔案,而不必重新下載。
伺服器端快取會在遠端執行商務服務的流程進行,而不是在使用者的裝置上。伺服器端快取通常分為私人 (僅供單一應用程式執行個體使用) 或共用 (供多個應用程式執行個體使用)。
CDN 會在更接近使用者的邊緣伺服器上快取內容,因此要求不一定都要回到來源。不同於瀏覽器快取 (單一使用者),CDN 快取是共用的,因此一位使用者的要求會先填入內容,之後另一位使用者則可接收內容。
快取不只是一種雲端運算模式,硬體和記憶體層也會使用它。
CPU 快取是一種位於處理器附近 (或處理器上的)小型快速記憶體區域,可儲存常用資料與指示的複本,以減少等待主記憶體的時間。
記憶體 (記憶體內部) 快取是最簡單的軟體快取類型:它是位於單一流程位址空間中的記憶體內部存放區,並由該流程直接存取。
分散式快取會跨越多部伺服器,因此快取容量和交易處理能力都能超過單一機器。許多共用快取服務會使用伺服器叢集,並將快取資料分散到整個叢集;若要擴充快取,只要新增更多伺服器即可。有些分散式設計也會分層快取,因此某一層發生遺漏時,會從上游提供者提取,然後將結果儲存在本機,供下一次要求使用。
快取會將經常存取的資料放在更接近使用位置的地方,這可改善回應時間,並協助系統處理更多並行要求。它也能減少原始資料存放區的競爭,例如資料庫連線數有限時。
在分散式應用程式中,快取通常會發生在多個位置,例如用戶端 (如瀏覽器) 和伺服器端 (在應用程式或共用快取服務中)。
從小處著手,專注於能帶來最明確回報的資料: