Compartir a través de


Enlace de salida de Azure Cache for Redis para Azure Functions

Los enlaces de salida de Azure Cache for Redis le permiten cambiar las claves de una caché en función de un conjunto de desencadenadores disponibles en la memoria caché.

Para obtener información sobre los detalles de instalación y configuración, consulte Introducción.

Importante

El modelo de Node.js v4 para Functions aún no es compatible con la extensión azure Cache for Redis. Para más detalles acerca de cómo funciona el modelo v4, consulte la Guía para desarrolladores de Node.js de Azure Functions. Para obtener más información acerca de las diferencias entre v3 y v4, consulte la Guía de migración.

Importante

El modelo de Python v2 para Functions aún no es compatible con la extensión Azure Cache for Redis. Para más información sobre cómo funciona el modelo v2, consulte la Guía para desarrolladores de Python de Azure Functions.

Ejemplo

Se puede crear una función C# mediante uno de los siguientes modos de C#:

  • Modelo de trabajo aislado: función compilada en C# que se ejecuta en un proceso trabajador aislado del tiempo de ejecución. Se requiere un proceso de trabajo aislado para admitir funciones de C# ejecutándose en versiones de .NET que son y no son LTS y .NET Framework. Las extensiones para las funciones de proceso de trabajo aisladas usan espacios de nombres Microsoft.Azure.Functions.Worker.Extensions.*.
  • Modelo en curso: función C# compilada que se ejecuta en el mismo proceso que el tiempo de ejecución de Functions. En una variación de este modelo, Functions se puede ejecutar mediante el scripting de C#, que se admite principalmente para la edición del portal de C#. Las extensiones para funciones en proceso utilizan espacios de nombres Microsoft.Azure.WebJobs.Extensions.*.

En el ejemplo siguiente se muestra un desencadenador pub/sub en el evento set con un enlace de salida a la misma instancia de Redis. El evento set desencadena la memoria caché y el enlace de salida devuelve un comando delete para la clave que desencadenó la función.

Importante

En el caso de las funciones de .NET, se recomienda usar el modelo de trabajo aislado en lugar del modelo en proceso. Para obtener una comparación de los modelos de trabajo en proceso y aislados, consulte las diferencias entre el modelo de trabajo aislado y el modelo en proceso para .NET en 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 };
        }
    }
}

En el ejemplo siguiente se muestra un desencadenador pub/sub en el evento set con un enlace de salida a la misma instancia de Redis. El evento set desencadena la memoria caché y el enlace de salida devuelve un comando delete para la clave que desencadenó la función.

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

En este ejemplo se muestra un desencadenador pub/sub en el evento set con un enlace de salida a la misma instancia de Redis. El evento set desencadena la memoria caché y el enlace de salida devuelve un comando delete para la clave que desencadenó la función.

Los enlaces se definen en este archivo "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"
}

Este código del index.js archivo toma la clave del desencadenador y la devuelve al enlace de salida para eliminar el elemento almacenado en caché.

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

En este ejemplo se muestra un desencadenador pub/sub en el evento set con un enlace de salida a la misma instancia de Redis. El evento set desencadena la memoria caché y el enlace de salida devuelve un comando delete para la clave que desencadenó la función.

Los enlaces se definen en este function.json archivo:

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

Este código del run.ps1 archivo toma la clave del desencadenador y la pasa al enlace de salida para eliminar el elemento almacenado en caché.

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

En este ejemplo se muestra un desencadenador pub/sub en el evento set con un enlace de salida a la misma instancia de Redis. El evento set desencadena la memoria caché y el enlace de salida devuelve un comando delete para la clave que desencadenó la función.

Los enlaces se definen en este function.json archivo:

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

Este código del __init__.py archivo toma la clave del desencadenador y la pasa al enlace de salida para eliminar el elemento almacenado en caché.

import logging

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

Atributos

Nota:

Todos los comandos son compatibles con este enlace.

La forma en que se define un parámetro de enlace de salida depende de si las funciones de C# se ejecutan en proceso o en un proceso de trabajo aislado.

El enlace de salida se define de esta manera:

Definición Ejemplo Descripción
En un out parámetro [Redis(<Connection>, <Command>)] out string <Return_Variable> La variable de cadena devuelta por el método es un valor de clave que el enlace usa para ejecutar el comando en la memoria caché específica.

En este caso, el tipo devuelto por el método es un valor de clave que el enlace usa para ejecutar el comando en la memoria caché específica.

Cuando la función tiene varios enlaces de salida, puede aplicar el atributo de enlace a la propiedad de un tipo que es un valor de clave, que el enlace usa para ejecutar el comando en la memoria caché específica. Para más información, consulte Varios enlaces de salida.


Independientemente del modo de proceso de C#, el atributo de enlace de salida admite las mismas propiedades:

Propiedad de atributo Descripción
Connection Nombre de la configuración de la aplicación que contiene el cadena de conexión de caché, como:<cacheName>.redis.cache.windows.net:6380,password...
Command Comando redis-cli que se va a ejecutar en la memoria caché, como: DEL.

anotaciones

La RedisOutput anotación admite estas propiedades:

Propiedad Descripción
name Nombre del enlace de entrada específico.
connection Nombre de la configuración de la aplicación que contiene el cadena de conexión de caché, como:<cacheName>.redis.cache.windows.net:6380,password...
command Comando redis-cli que se va a ejecutar en la memoria caché, como: DEL.

Configuración

En la siguiente tabla se explican las propiedades de configuración de enlace que se establecen en el archivo function.json.

Propiedad Descripción
name Nombre del enlace de entrada específico.
connection Nombre de la configuración de la aplicación que contiene el cadena de conexión de caché, como:<cacheName>.redis.cache.windows.net:6380,password...
command Comando redis-cli que se va a ejecutar en la memoria caché, como: DEL.

Consulte la sección de ejemplos para ver ejemplos completos.

Uso

La salida devuelve una cadena, que es la clave de la entrada de caché en la que se aplica el comando específico.

Hay tres tipos de conexiones que se permiten desde una instancia de Azure Functions a una instancia de Redis Cache en las implementaciones. Para el desarrollo local, también puede usar secretos de entidad de servicio. appsettings Use para configurar cada uno de los siguientes tipos de autenticación de cliente, suponiendo que se estableció Redis en Connection en la función .