你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于 Azure Functions 的 Azure Cache for Redis 输出绑定

Azure Cache for Redis 输出绑定允许根据缓存上的一组可用触发器更改缓存中的键。

有关设置和配置详细信息,请参阅概述

函数绑定的可用性范围

绑定类型 Azure 托管 Redis 用于 Redis 的 Azure 缓存
输出

重要

使用 Azure 托管 Redis 或 Azure Cache for Redis Enterprise 层时,请使用端口 10000 而不是端口 6380 或 6379。

重要

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.* 命名空间。
  • 进程内模型:编译的 C# 函数,该函数在与 Functions 运行时相同的进程中运行。 在此模型的变体中,可以使用 C# 脚本运行 Functions,该脚本主要用于 C# 门户编辑。 进程内函数的扩展使用 Microsoft.Azure.WebJobs.Extensions.* 命名空间。

以下示例显示了 set 事件上的 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 };
        }
    }
}

以下示例显示了 set 事件上的 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;
    }
}

以下示例显示了 set 事件上的 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;
}

以下示例显示了 set 事件上的 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

以下示例显示了 set 事件上的 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# 进程模式如何,输出绑定属性都支持相同的属性:

Attribute 属性 说明
Connection 包含缓存连接字符串的应用程序设置的名称,例如:<cacheName>.redis.cache.windows.net:6380,password...
Command 要对缓存执行的 redis-cli 命令,例如:DEL

批注

RedisOutput 注释支持以下属性:

properties 说明
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

重要

为了获得最佳安全性,函数应用应将 Microsoft Entra ID 与托管标识一起使用,以授权针对缓存的请求(如果可能)。 与共享访问密钥授权相比,使用 Microsoft Entra ID 和托管标识进行授权提供了更高的安全性和易用性。 若要详细了解如何将托管标识与缓存配合使用,请参阅使用 Microsoft Entra ID 进行缓存身份验证