Trace Id is missing
跳至主要內容

什麼是快取?

開發人員和 IT 專業人員使用快取儲存及存取暫存記憶體中的索引鍵/值資料,相較於將資料儲存在傳統資料儲存體,不僅速度更快且更輕鬆。快取在多個使用多種技術的案例中都很有用,例如具有隨機存取記憶體 (RAM) 的電腦快取、內容傳遞網路上的網路快取、Web 多媒體資料的 Web 快取,或協助讓雲端應用程式更具復原能力的雲端快取。開發人員通常會將應用程式設計成快取已處理的資料,然後將其重新規劃以處理要求,因此速度比標準資料庫查詢更快。

您可以使用快取,降低資料庫成本、提供比大部分資料庫所能提供更高的輸送量和較低的延遲,並提升雲端和 Web 應用程式的效能。

資料庫的快取如何運作?

開發人員可以使用資料庫快取補充主要資料庫,其可以放在資料庫或應用程式內,或設定為獨立層。雖然開發人員通常會依賴傳統資料庫儲存大型、持久、完整的資料集,但會使用快取儲存暫時性資料子集以供快速擷取。

您可以使用快取搭配所有類型的資料存放區,包括 NoSQL 資料庫,以及關聯式資料庫 (例如 SQL Server、 MySQL 或  MariaDB)。快取也適用於許多特定的資料平台,例如 適用於 PostgreSQL 的 Azure 資料庫、 Azure SQL Database 或  Azure SQL 受控執行個體。在您開始設定資料架構之前,建議您先研究哪種類型的資料存放區最符合您的需求。例如,您會想要先了解什麼是 PostgreSQL,再將其用來結合關聯式和非結構化資料存放區。

然而快取層有哪些優點,而什麼是 Redis?

開發人員會使用稱為「快取層」的多層快取,根據需求將不同類型的資料儲存在不同的快取中。藉由新增一或數個快取層,您將可以大幅改善資料層的輸送量和延遲效能。

Redis 是熱門的開放原始碼記憶體內部資料結構,可用來建立高效能快取層及其他資料存放區。最近的研究顯示,將 Azure Cache for Redis 新增至範例應用程式,可增加資料輸送量超過 800%,並改善延遲效能超過 1,000%1

快取也可以降低資料層的擁有權總成本 (TCO)。藉由使用快取處理最常見的查詢並降低資料庫負載,您可以減少過度佈建資料庫執行個體的需求,進而大幅節省成本並降低 TCO。

快取類型

您的快取策略取決於應用程式讀取和寫入資料的方式。您的應用程式是否需要大量寫入,或資料是否寫入一次但經常讀取? 傳回的資料一律是唯一的嗎? 不同的資料存取模式會影響您設定快取的方式。常見的快取類型包括另行快取、直接讀取式快取/直接寫入式快取,以及隱藏式快取/回寫式快取。

另行快取

針對具有大量讀取工作負載的應用程式,開發人員通常會使用另行快取程式設計模式 (或"端側快取")。開發人員會在應用程式外部置放端側快取,該應用程式可接著與快取連線以查詢和擷取資料,或直接與資料庫連線 (如果資料不在快取中)。當應用程式擷取資料時,會將其複製到快取以供未來查詢之用。

您可以使用端側快取,協助提升應用程式效能、維護快取與資料存放區之間的一致性,並防止快取中的資料過時。

直接讀取式快取/直接寫入式快取

直接讀取式快取會自動保持在最新狀態,而使用直接寫入式快取時,應用程式會將資料寫入快取,再寫入資料庫。這兩個快取會與資料庫保持一致,而且應用程式會將其視為主要資料存放區。

直接讀取式快取可協助簡化一再要求相同資料的應用程式,但快取本身比較複雜,而兩個步驟的直接寫入式快取程序則可能會產生延遲。開發人員會將這兩者配對,以協助確保快取與資料庫之間的資料一致性、減少直接寫入式快取延遲,並讓您更輕鬆地更新直接讀取式快取。

開發人員可以使用直接讀取式快取/直接寫入式快取,簡化應用程式程式碼、提高快取可擴縮性,並將資料庫負載降至最低。

隱藏式快取/回寫式快取

在此案例中,應用程式會將資料寫入快取,並立即獲得認可,然後快取本身會在背景將資料寫回資料庫。隱藏式快取 (有時稱為回寫式快取) 最適用於大量寫入工作負載,而且由於應用程式不需要等到寫入完成後再移至下一個工作,因此會提升寫入效能。

分散式快取與工作階段存放區的比較

許多人經常會將分散式快取與工作階段存放區混淆,這兩種方式很類似,但有不同的需求和用途。開發人員會針對工作階段導向應用程式 (例如 Web 應用程式) 中的設定檔、訊息及其他使用者資料實作工作階段存放區 (使用者層的暫存資料存放區),而不是使用分散式快取補充資料庫。

什麼是工作階段存放區?

工作階段導向應用程式會追蹤使用者在登入應用程式時所執行的動作。若要在使用者登出時保留該資料,您可以將其保留在工作階段存放區中,這會改進工作階段管理、降低成本,並提升應用程式效能。

使用工作階段存放區與快取資料庫有何不同?

在工作階段存放區中,不同使用者之間不會共用資料,而使用快取時,不同的使用者可以存取相同的快取。開發人員會使用快取提升資料庫或儲存體執行個體的效能,而使用工作階段存放區提升應用程式效能 (藉由將資料寫入記憶體內部存放區,完全無須存取資料庫)。

寫入工作階段存放區的資料通常是短期的,而使用主要資料庫快取的資料通常表示會持續更長的時間。工作階段存放區需要複寫、高可用性和資料持久性,以確保交易資料不會遺失,而且使用者仍會繼續參與。另一方面,如果端側快取的資料遺失,永久資料庫中一律會有複本。

快取的優點

提升應用程式效能

從記憶體內部快取讀取資料,比從磁碟驅動資料存放區存取資料更快。而且由於更快速地存取資料,整體應用程式體驗也大幅改進。

降低資料庫使用量和成本

快取會導致較少的資料庫查詢,而且由於限制了調整資料庫基礎結構的需求及降低輸送量費用,因此提升效能並降低成本。

可調整且可預測的效能

單一快取執行個體每秒可處理數百萬個要求,提供資料庫無法比擬的輸送量和可擴縮性層級。無論您要擴增或擴大應用程式和資料存放區,快取也會提供您所需的彈性。然後,您的應用程式可讓許多使用者同時存取相同的檔案,而不會增加後端資料庫的負載。此外,如果應用程式經常遇到使用量尖峰和高輸送量,記憶體內部快取可以減輕延遲。

快取的用途為何?

輸出快取

輸出快取藉由儲存頁面 (例如 HTML) 的完整原始程式碼及伺服器傳送至瀏覽器進行轉譯的用戶端指令碼,協助提升網頁效能。每次使用者檢視頁面時,伺服器都會快取應用程式記憶體中的輸出程式碼。這可讓應用程式處理要求,而不需要執行頁面程式碼或與其他伺服器通訊。

資料快取和資料庫快取

資料庫速度和輸送量可能是整體應用程式效能的關鍵因素。資料庫快取可用來對不常變更的資料進行頻繁的呼叫,例如定價或清查資料。其可協助加快網站和應用程式的載入速度,同時增加輸送量並減少來自後端資料庫的資料擷取延遲。

儲存使用者工作階段資料

應用程式使用者經常產生必須短期儲存的資料。記憶體內部資料存放區 (例如 Redis) 非常適合用於儲存大量的工作階段資料 (例如使用者輸入、購物車輸入或個人化喜好設定),不僅有效率且很可靠,成本也比儲存體或資料庫低。

訊息代理程式和發佈/訂閱架構

雲端應用程式通常需要在服務之間交換資料,並可使用快取實作發佈/訂閱或訊息代理程式架構,以減少延遲並加速資料管理。

應用程式和 API

如同瀏覽器,應用程式會儲存重要的檔案和資料,以便在需要時快速重新載入該資訊。快取的 API 回應可排除應用程式伺服器和資料庫上的需求或負載,提供更快速的回應時間和更好的效能。

[1] 效能主張來自 Microsoft 委託並由 GigaOm 於 2020 年 10 月進行研究的資料。該研究比較了使用 Azure 資料庫時,測試應用程式在有無實作 Azure Cache for Redis 為快取解決方案的效能。該研究中使用 Azure SQL Database 與適用於 PostgreSQL 的 Azure 資料庫作為資料庫元素。使用了 2 個虛擬核心的 Azure SQL Database 第 5 代一般用途執行個體,以及 2 個虛擬核心之適用於 PostgreSQL 的 Azure 資料庫一般用途執行個體,並搭配 Azure for Redis 的 6 GB P1 Premium 執行個體。這些結果會與 8、16、24 及 32 個虛擬核心的 Azure SQL Database 第 5 代一般用途執行個體,以及 8、16、24 及 32 個虛擬核心之適用於 PostgreSQL 的 Azure 資料庫一般用途執行個體 (未搭配 Azure Cache for Redis) 進行比較。基準資料的來源為 GigaOm Web 應用程式資料庫負載測試,該測試會透過增加 HTTP 要求模擬負載過重的一般 Web 應用程式與後端資料庫。實際結果可能會因設定和區域而有所不同。 請參閱完整研究

免費帳戶

免費試用 Azure 雲端運算服務,最多 30 天。

隨用隨付

透過隨用隨付的定價方式開始使用。無需前期承諾用量,且隨時都能取消。

使用完全受管理的 Redis 服務,將靈活的快取層新增至您的應用程式。了解如何開始使用 Azure Cache for Redis。

如果您想要針對高效能應用程式執行以檔案為基礎的彈性快取,請深入閱讀 Azure HPC Cache。