略過導覽

什麼是快取?

開發人員和 IT 專業人員使用快取來更快地儲存及存取暫存記憶體中的金鑰值資料,這樣比使用傳統資料儲存體中儲存的資料較不費力。快取在多個具有多種技術的案例下很有用,例如具有隨機存取記憶體 (RAM) 的電腦快取、內容傳遞網路上的網路快取、Web 多媒體資料的 Web 快取,或雲端快取,可協助讓雲端應用程式更具彈性。開發人員通常會設計應用程式來快取處理過的資料,然後重新設計應用程式來服務要求,這比標準資料庫查詢還快。

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

資料庫的快取如何運作?

開發人員可以使用資料庫快取來補充主要資料庫,這些快取可以放在資料庫或應用程式中,或設定為獨立層。雖然它們通常仰賴傳統資料庫來儲存大型、耐久、完整的資料集,但是會使用快取來儲存資料的暫時性子集,以便快速檢索。

您可以搭配所有類型的資料存放區使用快取,包括 NoSQL 資料庫和關聯式資料庫,例如 SQL Server、MySQLMariaDB。快取也適用於許多特定資料平台,例如 適用於 PostgreSQL 的 Azure 資料庫Azure SQL DatabaseAzure SQL 受控執行個體。建議您先研究何種類型的資料存放區最符合您的需求,再開始設定資料架構。例如,使用 PostgreSQL 來合併關聯式和非結構化資料存放區之前,請先了解 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 資料庫被用作研究中的資料庫元素。Azure SQL Database 的 2 個虛擬核心 Gen5 一般用途執行個體和適用於 PostgreSQL 的 Azure 資料庫的 2 個虛擬核心一般用途執行個體會搭配 Azure for Redis 的 6 GB P1 Premium 執行個體一起使用。系統會將這些結果與 Azure SQL Database 的 8、16、24 和 32 個虛擬核心 Gen5 一般用途執行個體,和沒有 Azure Cache for Redis 的適用於 PostgreSQL 的 Azure 資料庫的 8、16、24 和 32 個虛擬核心一般用途執行個體進行比較。基準資料取自 GigaOm Web 應用程式資料庫負載測試,該測試模擬常見的 Web 應用程式和後端資料庫,這些資料庫被不斷增加的 HTTP 要求所阻擋。實際結果可能因設定和地區而異。查看完整研究

使用完全受控的 Redis 服務,將敏捷快取階層新增至您的應用程式: 了解如何開始使用 Azure Cache for Redis。

如果您想要為高效能應用程式執行彈性的檔案式快取,請參閱「Azure HPC Cache」。