快取和 Redis
您的應用程式必須快速回應使用者要求。 網站速度緩慢時,訪客很快就會不耐煩並離開您的網站,或許還會造訪您競爭對手的網站。 如何建立快速回應的應用程式,即使要求的是一組複雜的資料亦然? 使應用程式加速的其中一種方式,是使用快取。
假設您任職於戶外設備零售商。 您新的 Web 應用程式正在開發中,且有數個微服務即將發行第一個版本,但有些頁面載入速度太慢。 您想設法提升其效能。
在本單元中,您將了解快取如何協助您提升 Web 應用程式的速度。
什麼是 Redis?
Redis 是記憶體內部資訊存放區的開放原始碼。 其名稱是遠端字典伺服器 (Remote Dictionary Server) 的簡稱。 Redis 最重要的功能可能是讀取和寫入作業的低延遲,這得力於其獨特設計,以及將所有資訊保存在記憶體中的特性。 Redis 包含資料庫和訊息代理程式功能,但常被視為快取系統。
快取如何改善效能
快取可用來為許多需耗時建構使用者回應的系統改善效能。 例如,請考量從微服務建構的電子商務網站。 當使用者想知道購物籃中有哪些項目時,系統可能會:
- 在 Web 應用程式微服務中接收要求。
- 呼叫驗證微服務,以檢查使用者的身分識別 (若他們已登入)。
- 呼叫購物籃微服務,以確認購物籃中的項目和數量。
- 呼叫產品目錄微服務,以取得每項產品的完整詳細資料。
- 呼叫影像微服務,以取得每項產品的影像 Blob。
- 呼叫庫存盤點微服務以檢查庫存水準。
- 呼叫出貨微服務,以根據使用者的位置和喜好設定計算出貨成本。
確切步驟可能隨著您的設計和商務功能而有所不同,但您可以看到,程序可能相當複雜,且涉及許多個別的微服務和支援服務。 雖然每個微服務均應妥善設定並配置資源以順利執行,但建構回應免不了要耗用一些時間。
現在,假設使用者重新整理頁面。 如果整個或部分頁面已儲存在快取中,則傳回給使用者的速度會比原始要求快得多,而無須從頭重新建構整個 HTML 回應。 這種快速回應有助於提高 Web 應用程式的回應性,而更受使用者歡迎。
快取考量
在使用快取時,關鍵設計決策是要快取特定內容多久的時間。 以購物籃為例,如果您將已完成的購物籃頁面快取一小時,在此期間可能會有其他訂單下訂,則快取的頁面有時會報告過期的庫存水準,且使用者等待交貨的時間可能會比預期還久。 如果您只快取頁面一分鐘,庫存水準應該就會比較準確,但效能幾乎沒有改善。 因此,當您選擇快取資訊的時間長度時,請考量:
- 資訊變更的頻率為何? 例如,庫存水準可能會在一小時內多次變更,但新產品可能幾個月才會出現在目錄中一次。
- 讓使用者看到最新資訊有何重要性? 例如,庫存水準可能很重要,但您可能會認為新產品的評論較不具時限性。
- 您可能多久會收到一次資訊的要求? 快取熱門資訊會產生更大的效能改善,因為系統可從快取提供資訊多次。
在 .NET Aspire 專案中使用 Redis
Redis 是在雲端原生應用程式中進行快取的熱門選擇。 .NET Aspire 提供三項可用來與 Redis 服務互動的元件:
- .NET Aspire StackExchange Redis 元件:使用此元件可直接與 Redis 伺服器互動。 例如,您可以用它來儲存及擷取 Redis 資料庫中的值,或訂閱傳送至通道的訊息。 由於此元件並不著重於快取,我們在此課程模組中將不深入加以討論。
- .NET Aspire StackExchange Redis 輸出快取元件:使用此元件可快取完整的 HTTP 回應。
- .NET Aspire StackExchange Redis 分散式快取元件:使用此快取元件可從分散式快取中儲存及擷取資料。 分散式快取是指多個微服務或其他用戶端服務共用單一快取的架構。