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

适用于 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.* 命名空间。
  • 进程内模型:编译的 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