你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 Azure Functions 的 Azure Cache for Redis 输入绑定
函数运行时,Azure Cache for Redis 输入绑定会从缓存中检索数据,并将其作为输入参数传递给函数。
有关设置和配置详细信息,请参阅概述。
函数绑定的可用性范围
绑定类型 | Azure 托管 Redis | 用于 Redis 的 Azure 缓存 |
---|---|---|
Input | 是 | 是 |
重要
使用 Azure 托管 Redis 或 Azure Redis 缓存的企业层时,请使用端口 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.*
命名空间。
重要
对于 .NET 函数,建议在进程内模型中使用独立辅助角色模型。 有关进程内和隔离辅助角色模型的比较,请参阅 Azure Functions 上 .NET 的独立辅助角色模型与进程内模型之间的差异。
以下代码使用 pub/sub 触发器中的键通过 GET
命令从输入绑定获取和记录值:
using Microsoft.Extensions.Logging;
namespace Microsoft.Azure.Functions.Worker.Extensions.Redis.Samples.RedisInputBinding
{
public class SetGetter
{
private readonly ILogger<SetGetter> logger;
public SetGetter(ILogger<SetGetter> logger)
{
this.logger = logger;
}
[Function(nameof(SetGetter))]
public void Run(
[RedisPubSubTrigger(Common.connectionStringSetting, "__keyevent@0__:set")] string key,
[RedisInput(Common.connectionStringSetting, "GET {Message}")] string value)
{
logger.LogInformation($"Key '{key}' was set to value '{value}'");
}
}
}
如需更多有关 Azure Cache for Redis 输入绑定的示例,可参阅 GitHub 存储库。
以下代码使用 pub/sub 触发器中的键通过 GET
命令从输入绑定获取和记录值:
package com.function.RedisInputBinding;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.redis.annotation.*;
public class SetGetter {
@FunctionName("SetGetter")
public void run(
@RedisPubSubTrigger(
name = "key",
connection = "redisConnectionString",
channel = "__keyevent@0__:set")
String key,
@RedisInput(
name = "value",
connection = "redisConnectionString",
command = "GET {Message}")
String value,
final ExecutionContext context) {
context.getLogger().info("Key '" + key + "' was set to value '" + value + "'");
}
}
此 function.json 定义了 Azure Cache for Redis 实例上的 GET 消息的 pub/sub 触发器和输入绑定:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisConnectionString",
"command": "GET {Message}",
"name": "value",
"direction": "in"
}
],
"scriptFile": "index.js"
}
此 JavaScript 代码(从 index.js)检索并记录与 pub/sub 触发器提供的密钥相关的缓存值。
module.exports = async function (context, key, value) {
context.log("Key '" + key + "' was set to value '" + value + "'");
}
此 function.json 定义了 Azure Cache for Redis 实例上的 GET 消息的 pub/sub 触发器和输入绑定:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisConnectionString",
"command": "GET {Message}",
"name": "value",
"direction": "in"
}
],
"scriptFile": "run.ps1"
}
此 PowerShell 代码(来自 run.ps1)检索并记录与 pub/sub 触发器提供的密钥相关的缓存值。
param($key, $value, $TriggerMetadata)
Write-Host "Key '$key' was set to value '$value'"
此 function.json 定义了 Azure Cache for Redis 实例上的 GET 消息的 pub/sub 触发器和输入绑定: 该示例取决于使用的是 v1 还是 v2 Python 编程模型。
此 function.json 定义了 Azure Cache for Redis 实例上的 GET 消息的 pub/sub 触发器和输入绑定:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisConnectionString",
"command": "GET {Message}",
"name": "value",
"direction": "in"
}
]
}
此 Python 代码(从 __init__.py)检索并记录与 pub/sub 触发器提供的密钥相关的缓存值:
import logging
def main(key: str, value: str):
logging.info("Key '" + key + "' was set to value '" + value + "'")
配置部分解释了这些属性。
属性
注意
此绑定仅支持部分命令。 目前,仅支持返回单个输出的读取命令。 可以在此处找到完整列表
Attribute 属性 | 说明 |
---|---|
Connection |
包含缓存连接字符串的应用程序设置的名称,例如:<cacheName>.redis.cache.windows.net:6380,password... |
Command |
要对缓存执行的 redis-cli 命令,其中包含以空格分隔的所有参数,例如:GET key 、HGET key field 。 |
批注
RedisInput
注释支持以下属性:
properties | 说明 |
---|---|
name |
特定输入绑定的名称。 |
connection |
包含缓存连接字符串的应用程序设置的名称,例如:<cacheName>.redis.cache.windows.net:6380,password... |
command |
要对缓存执行的 redis-cli 命令,其中包含以空格分隔的所有参数,例如:GET key 或 HGET key field 。 |
配置
下表解释了在 function.json 文件中设置的绑定配置属性。
“function.json”属性 | 说明 |
---|---|
connection |
包含缓存连接字符串的应用程序设置的名称,例如:<cacheName>.redis.cache.windows.net:6380,password... |
command |
要对缓存执行的 redis-cli 命令,其中包含以空格分隔的所有参数,例如:GET key 、HGET key field 。 |
注意
适用于 Functions 的 Python v2 和 Node.js v4 不使用 function.json 来定义函数。 Azur Redis 缓存绑定目前不支持这两种新语言版本。
有关完整示例,请参阅示例部分。
使用情况
输入绑定需要从缓存接收字符串。
使用自定义类型作为绑定参数时,扩展会尝试将 JSON 格式的字符串反序列化为此参数的自定义类型。