本文說明如何使用 Azure 受控 Redis 或 Azure Cache for Redis 搭配 Azure Functions 來建立優化的無伺服器和事件驅動架構。
Azure Functions 提供事件驅動程序設計模型,其中觸發程式和系結是主要功能。 使用 Azure Functions,您可以輕鬆地建置事件驅動的無伺服器應用程式。 Azure Redis 服務 (Azure Managed Redis 和 Azure Cache for Redis) 提供一組建置分散式應用程式的建置組塊和最佳做法,包括微服務、狀態管理、發佈/子傳訊等等。
Azure Redis 可作為 Azure Functions 的觸發程式,可讓您起始無伺服器工作流程。 這項功能在資料架構 (例如寫入後置快取) 或任何事件型架構中非常實用。
您可以整合 Azure Redis 和 Azure Functions 來建置函式,以回應來自 Azure Redis 或外部系統的事件。
| 動作 | 方向 |
|---|---|
| Redis pub 子訊息上的觸發程式 | 觸發程序 |
| Redis 清單上的觸發程式 | 觸發程序 |
| Redis 數據流上的觸發程式 | 觸發程序 |
| 讀取快取的值 | 輸入 |
| 寫入要快取的值 | 輸出 |
函式觸發程式和系結的可用性範圍
| 層 | Azure Cache for Redis (Basic、Standard、Premium、Enterprise、Enterprise Flash) | Azure 受控 Redis (記憶體優化、基本、計算優化、快閃優化) |
|---|---|---|
| Pub/Sub | Yes | Yes |
| 清單 | Yes | Yes |
| 資料流 | Yes | Yes |
| 繫結 | Yes | Yes |
重要
Redis 觸發程式目前僅支援在彈性進階方案或專用 App Service 方案中執行的函式。
安裝擴充功能
函式會在隔離的 C# 背景工作進程中執行。 若要深入瞭解,請參閱 在隔離背景工作程序中執行 C# Azure Functions 的指南。
藉由安裝 此 NuGet 套件,將擴充功能新增至您的專案。
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis
安裝搭售方案
若要能夠在應用程式中使用這個繫結延伸模組,請確定專案根目錄中的 host.json 檔案包含下列 extensionBundle 參考:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.0.0, 5.0.0)"
}
}
在此範例中, version 的 [4.0.0, 5.0.0) 值指示 Functions 主機使用至少 4.0.0 但小於 5.0.0的套件版本,其中包括 4.x 的所有潛在版本。 此表示法可有效地在 v4.x 擴充功能套件組合的最新可用次要版本上維護您的應用程式。
可能的話,您應該使用最新的延伸套件組合主要版本,並允許執行階段自動維護最新的次要版本。 您可以在 延伸套件組合發行頁面上檢視最新套件組合的內容。 如需詳細資訊,請參閱 Azure Functions 延伸模組套件組合。
更新套件
<dependency>
<groupId>com.microsoft.azure.functions</groupId>
<artifactId>azure-functions-java-library-redis</artifactId>
<version>1.0.0</version>
</dependency>
Redis 連接字串
Azure Redis 觸發程式和系結具有必要屬性,指出包含快取連線資訊的應用程式設定或集合名稱。 Redis 觸發程式或系結會尋找具有傳遞至 參數名稱之 連接字串 的Connection環境變數。
在本機開發中,Connection可以使用 local.settings.json 檔案來定義 。 部署至 Azure 時, 可以使用應用程式設定 。
使用 Azure 函式連線到快取執行個體時,您可以在部署中使用下列其中一種連線:
使用者指派的受控識別必須與您的函式應用程式相關聯,而且該身分識別也必須在快取服務中授與明確許可權。 如需詳細資訊,請參閱 使用 Microsoft Entra ID 進行快取驗證。
這些範例會根據用戶端驗證類型顯示連線到每個快取服務所需的應用程式設定索引鍵名稱和值,假設 Connection 繫結中的屬性設定 Redis為 。
"Redis__redisHostName": "<cacheName>.<region>.redis.azure.net",
"Redis__principalId": "<principalId>",
"Redis__clientId": "<clientId>"