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.
Ámbito de disponibilidad para enlaces de funciones
Tipo de enlace | Azure Managed Redis | Azure Cache for Redis |
---|---|---|
Output | Sí | Sí |
Importante
Al usar Azure Managed Redis o los niveles Enterprise de Azure Cache for Redis, use el puerto 10000 en lugar del puerto 6380 o 6379.
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 el 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 .