Compartilhar via


Associação de saída do Cache do Azure para Redis para Azure Functions

As associações de saída do Cache do Azure para Redis permitem que você altere as chaves em um cache com base em um conjunto de gatilhos disponíveis no cache.

Para obter informações sobre a instalação e detalhes de configuração, confira a visão geral.

Escopo de disponibilidade para associações de funções

Tipo de associação Redis Gerenciado do Azure Cache do Azure para Redis
Saída Sim Sim

Importante

Ao usar o Azure Managed Redis ou as camadas Enterprise do Cache do Azure para Redis, use a porta 10000 em vez da porta 6380 ou 6379.

Importante

O modelo Node.js v4 para Functions ainda não tem suporte na extensão Cache do Azure para Redis. Para obter mais detalhes sobre como funciona o modelo v4, consulte o Guia do desenvolvedor do Node.js para o Azure Functions. Para saber mais sobre as diferenças entre os modelos v3 e a v4, consulte o Guia de migração.

Importante

O modelo Python v2 para Functions ainda não é compatível com a extensão Cache do Azure para Redis. Para obter mais detalhes sobre como funciona o modelo v2, consulte o Guia de desenvolvedor do Node.js para Azure Functions.

Exemplo

A função C# pode ser criada por meio de um dos seguintes modos C#:

  • Modelo de trabalho isolado: função C# compilada executada em um processo de trabalho que está isolado do runtime. É necessário um processo de trabalho isolado para dar suporte às funções C# executadas nas versões LTS e não LTS do .NET e do .NET Framework. As extensões para funções do processo de trabalho isoladas usam namespaces Microsoft.Azure.Functions.Worker.Extensions.*.
  • Modelo em processo: função C# compilada no mesmo processo que o runtime do Functions. Em uma variação desse modelo, o Functions pode ser executado usando scripts C#, que é compatível principalmente com a edição do portal C#. As extensões para funções dentro do processo usam namespaces Microsoft.Azure.WebJobs.Extensions.*.

O exemplo a seguir mostra um gatilho pub/sub no evento set com uma associação de saída para a mesma instância do Redis. O evento set dispara o cache e a associação de saída retorna um comando delete para a chave que disparou a função.

Importante

Para funções .NET, é recomendado usar o modelo de trabalho isolado em vez do modelo em processo. Para obter uma comparação dos modelos de trabalho em processo e isolados, consulte as diferenças entre o modelo de trabalho isolado e o modelo em processo para .NET no Azure Functions.


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 };
        }
    }
}

O exemplo a seguir mostra um gatilho pub/sub no evento set com uma associação de saída para a mesma instância do Redis. O evento set dispara o cache e a associação de saída retorna um comando delete para a chave que disparou a função.

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;
    }
}

Este exemplo mostra um gatilho pub/sub no evento set com uma associação de saída para a mesma instância do Redis. O evento set dispara o cache e a associação de saída retorna um comando delete para a chave que disparou a função.

As ligações são definidas no arquivo '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"
}

Esse código do arquivo pega index.js a chave do gatilho e a retorna para a associação de saída para excluir o item armazenado em cache.

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

Este exemplo mostra um gatilho pub/sub no evento set com uma associação de saída para a mesma instância do Redis. O evento set dispara o cache e a associação de saída retorna um comando delete para a chave que disparou a função.

As associações são definidas neste function.json arquivo:

{
    "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"
}

Esse código do arquivo pega run.ps1 a chave do gatilho e a passa para a associação de saída para excluir o item armazenado em cache.

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

Este exemplo mostra um gatilho pub/sub no evento set com uma associação de saída para a mesma instância do Redis. O evento set dispara o cache e a associação de saída retorna um comando delete para a chave que disparou a função.

As associações são definidas neste function.json arquivo:

{
    "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"
}

Esse código do arquivo pega __init__.py a chave do gatilho e a passa para a associação de saída para excluir o item armazenado em cache.

import logging

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

Atributos

Observação

Todos os comandos têm suporte para essa associação.

A maneira como você define um parâmetro de associação de saída depende se as funções C# são executadas em processo ou em um processo de trabalho isolado.

A associação de saída é definida desta forma:

Definição Exemplo Descrição
Em um out parâmetro [Redis(<Connection>, <Command>)] out string <Return_Variable> A variável de cadeia de caracteres retornada pelo método é um valor de chave que a associação usa para executar o comando no cache específico.

Nesse caso, o tipo retornado pelo método é um valor de chave que a associação usa para executar o comando no cache específico.

Quando sua função tem várias associações de saída, você pode aplicar o atributo de associação à propriedade de um tipo que é um valor de chave, que a associação usa para executar o comando no cache específico. Para obter mais informações, consulte Várias associações de saída.


Independentemente do modo de processo C#, as mesmas propriedades têm suporte pelo atributo de associação de saída:

Propriedade de atributo Descrição
Connection O nome da configuração do aplicativo que contém a cadeia de conexão de cache, como:<cacheName>.redis.cache.windows.net:6380,password...
Command O comando redis-cli a ser executado no cache, como: DEL.

Anotações

A RedisOutput anotação suporta estas propriedades:

Propriedade Descrição
name O nome da associação de entrada específica.
connection O nome da configuração do aplicativo que contém a cadeia de conexão de cache, como:<cacheName>.redis.cache.windows.net:6380,password...
command O comando redis-cli a ser executado no cache, como: DEL.

Configuração

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json.

Propriedade Descrição
name O nome da associação de entrada específica.
connection O nome da configuração do aplicativo que contém a cadeia de conexão de cache, como:<cacheName>.redis.cache.windows.net:6380,password...
command O comando redis-cli a ser executado no cache, como: DEL.

Consulte a Seção de exemplo para obter exemplos completos.

Uso

A saída retorna uma string, que é a chave da entrada de cache na qual se aplica o comando específico.

Há três tipos de conexões permitidas de uma instância do Azure Functions para um Cache Redis em suas implantações. Para desenvolvimento local, você também pode usar segredos da entidade de serviço. Use o appsettings para configurar cada um dos seguintes tipos de autenticação de cliente, supondo que o Connection foi definido como Redis na função.