分享方式:


Azure Functions 的 Azure Cache for Redis 輸出系結

Azure Cache for Redis 輸出系結可讓您根據快取上的一組可用觸發程式來變更快取中的索引鍵。

如需安裝和組態詳細數據的詳細資訊,請參閱概

重要

Azure Cache for Redis 擴充功能尚不支援適用於 Functions 的 Node.js v4 模型。 如需 v4 模型運作方式的更多詳細資料,請參閱 Azure Functions Node.js 開發人員指南。 若要深入了解 v3 與 v4 之間的差異,請參閱移轉指南

重要

Azure Cache for Redis 擴充功能尚不支援適用於 Functions 的 Python v2 模型。 如需 v2 模型運作方式的更多詳細資料,請參閱 Azure Functions Python 開發人員指南

範例

您可以使用下列其中一種 C# 模式來建立 C# 函式:

  • 隔離的背景工作模型:在與運行時間隔離的背景工作進程中執行的已編譯 C# 函式。 需要隔離的背景工作進程,才能支援在 LTS 和非 LTS 版本 .NET 和 .NET Framework 上執行的 C# 函式。 隔離背景工作進程函式的延伸模組會使用 Microsoft.Azure.Functions.Worker.Extensions.* 命名空間。
  • 同進程模型:在與 Functions 運行時間相同的進程中執行的已編譯 C# 函式。 在此模型的變化中,函式可以使用 C# 腳本來執行,主要支援 C# 入口網站編輯。 進程內函式的延伸模組會使用 Microsoft.Azure.WebJobs.Extensions.* 命名空間。

下列範例顯示集合事件上的 pub/sub 觸發程式,並將輸出系結系結至相同的 Redis 實例。 set 事件會觸發快取,而輸出系結會傳回觸發函式之索引鍵的 delete 命令。

重要

針對 .NET 函式,建議針對進程內模型使用隔離的背景工作模型。 如需同進程隔離背景工作模型的比較,請參閱隔離的背景工作模型與 Azure Functions 上 .NET 的同進程模型之間的差異


using Microsoft.Extensions.Logging;

namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisOutputBinding
{
    internal class SetDeleter
    {
        [Function(nameof(SetDeleter))]
        [RedisOutput(Common.connectionString, "DEL")]
        public static string Run(
            [RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:set")] string key,
            ILogger logger)
        {
            logger.LogInformation($"Deleting recently SET key '{key}'");
            return key;
        }
    }
}
using Microsoft.Extensions.Logging;

namespace Microsoft.Azure.WebJobs.Extensions.Redis.Samples.RedisOutputBinding
{
    internal class SetDeleter
    {
        [FunctionName(nameof(SetDeleter))]
        public static void Run(
            [RedisPubSubTrigger(Common.connectionStringSetting, "__keyevent@0__:set")] string key,
            [Redis(Common.connectionStringSetting, "DEL")] out string[] arguments,
            ILogger logger)
        {
            logger.LogInformation($"Deleting recently SET key '{key}'");
            arguments = new string[] { key };
        }
    }
}

下列範例顯示集合事件上的 pub/sub 觸發程式,並將輸出系結系結至相同的 Redis 實例。 set 事件會觸發快取,而輸出系結會傳回觸發函式之索引鍵的 delete 命令。

package com.function.RedisOutputBinding;

import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;

public class SetDeleter {
    @FunctionName("SetDeleter")
    @RedisOutput(
                name = "value",
                connection = "redisConnectionString",
                command = "DEL")
    public String run(
            @RedisPubSubTrigger(
                name = "key",
                connection = "redisConnectionString",
                channel = "__keyevent@0__:set")
                String key,
            final ExecutionContext context) {
        context.getLogger().info("Deleting recently SET key '" + key + "'");
        return key;
    }
}

此範例示範集合事件上的 pub/sub 觸發程式,並將輸出系結系結至相同的 Redis 實例。 set 事件會觸發快取,而輸出系結會傳回觸發函式之索引鍵的 delete 命令。

系結定義在此 『function.json』 檔案中:

{
    "bindings": [
        {
            "type": "redisPubSubTrigger",
            "connection": "redisConnectionString",
            "channel": "__keyevent@0__:set",
            "name": "key",
            "direction": "in"
        },
        {
            "type": "redis",
            "connection": "redisConnectionString",
            "command": "DEL",
            "name": "$return",
            "direction": "out"
        }
    ],
    "scriptFile": "index.js"
}

檔案中的 index.js 這個程式代碼會從觸發程式取得索引鍵,並將它傳回至輸出系結,以刪除快取的專案。

module.exports = async function (context, key) {
    context.log("Deleting recently SET key '" + key + "'");
    return key;
}

此範例示範集合事件上的 pub/sub 觸發程式,並將輸出系結系結至相同的 Redis 實例。 set 事件會觸發快取,而輸出系結會傳回觸發函式之索引鍵的 delete 命令。

系結定義在此檔案中 function.json

{
    "bindings": [
        {
            "type": "redisPubSubTrigger",
            "connection": "redisLocalhost",
            "channel": "__keyevent@0__:set",
            "name": "key",
            "direction": "in"
        },
        {
            "type": "redis",
            "connection": "redisLocalhost",
            "command": "DEL",
            "name": "retVal",
            "direction": "out"
        }
    ],
    "scriptFile": "run.ps1"
}

檔案中的 run.ps1 這個程式代碼會從觸發程式取得索引鍵,並將其傳遞至輸出系結,以刪除快取的專案。

param($key, $TriggerMetadata)
Write-Host "Deleting recently SET key '$key'"
Push-OutputBinding -Name retVal -Value $key

此範例示範集合事件上的 pub/sub 觸發程式,並將輸出系結系結至相同的 Redis 實例。 set 事件會觸發快取,而輸出系結會傳回觸發函式之索引鍵的 delete 命令。

系結定義在此檔案中 function.json

{
    "bindings": [
        {
            "type": "redisPubSubTrigger",
            "connection": "redisLocalhost",
            "channel": "__keyevent@0__:set",
            "name": "key",
            "direction": "in"
        },
        {
            "type": "redis",
            "connection": "redisLocalhost",
            "command": "DEL",
            "name": "$return",
            "direction": "out"
        }
    ],
    "scriptFile": "__init__.py"
}

檔案中的 __init__.py 這個程式代碼會從觸發程式取得索引鍵,並將其傳遞至輸出系結,以刪除快取的專案。

import logging

def main(key: str) -> str:
    logging.info("Deleting recently SET key '" + key + "'")
    return key

屬性

注意

此系結支援所有命令。

您定義輸出係結參數的方式取決於您的 C# 函 式是在進程 內或 隔離的背景工作進程中執行。

輸出系結的定義方式如下:

定義 範例 描述
out在參數上 [Redis(<Connection>, <Command>)] out string <Return_Variable> 方法傳回的字串變數是系結用來針對特定快取執行命令的索引鍵值。

在此情況下,方法傳回的類型是系結用來針對特定快取執行命令的索引鍵值。

當您的函式有多個輸出系結時,您可以改為將系結屬性套用至屬於索引鍵值的型別屬性,而系結會使用此屬性對特定快取執行命令。 如需詳細資訊,請參閱多重輸出繫結


不論 C# 行程模式為何,輸出系結屬性都支援相同的屬性:

屬性內容 描述
Connection 包含快取 連接字串 的應用程式設定名稱,例如:<cacheName>.redis.cache.windows.net:6380,password...
Command 快取上要執行的 redis-cli 命令,例如: DEL

註釋

RedisOutput 解支援下列屬性:

屬性 說明
name 特定輸入系結的名稱。
connection 包含快取 連接字串 的應用程式設定名稱,例如:<cacheName>.redis.cache.windows.net:6380,password...
command 快取上要執行的 redis-cli 命令,例如: DEL

組態

下表說明您在 function.json 檔案中設定的繫結設定屬性。

屬性 說明
name 特定輸入系結的名稱。
connection 包含快取 連接字串 的應用程式設定名稱,例如:<cacheName>.redis.cache.windows.net:6380,password...
command 快取上要執行的 redis-cli 命令,例如: DEL

如需完整範例,請參閱範例一節。

使用方式

輸出會傳回字串,這是套用特定命令之快取專案的索引鍵。

部署中允許從 Azure Functions 實例到 Redis 快取的三種連線類型。 針對本機開發,您也可以使用服務主體秘密。 使用 來 appsettings 設定下列每種類型的客戶端驗證,假設 Connection 已在函式中將 設定為 Redis