Teilen über


Azure Cache für Redis-Ausgabebindung für Azure Functions

Mit dem Azure Cache für Redis-Ausgabebindungen können Sie die Schlüssel in einem Cache basierend auf einem Satz verfügbarer Trigger im Cache ändern.

Informationen zu Setup- und Konfigurationsdetails finden Sie in der Übersicht.

Wichtig

Das Node.js v4-Modell für Funktionen wird von der Azure Cache for Redis-Erweiterung noch nicht unterstützt. Weitere Informationen zur Funktionsweise des v4-Modells finden Sie im Azure Functions Node.js-Entwicklerhandbuch. Weitere Informationen zu den Unterschieden zwischen v3 und v4 finden Sie im Migrationshandbuch.

Wichtig

Das Python v2-Modell für Funktionen wird von der Azure Cache for Redis-Erweiterung noch nicht unterstützt. Weitere Informationen zur Funktionsweise des v2-Modells finden Sie im Azure Functions Python-Entwicklerhandbuch.

Beispiel

Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:

  • Isoliertes Workermodell: Kompilierte C#-Funktion, die in einem Workerprozess ausgeführt wird, der von der Runtime isoliert ist. Ein isolierter Workerprozess ist erforderlich, um C#-Funktionen zu unterstützen, die in LTS- und Nicht-LTS-Versionen von .NET und .NET Framework ausgeführt werden. Erweiterungen für isolierte Workerprozessfunktionen verwenden Microsoft.Azure.Functions.Worker.Extensions.*-Namespaces.
  • In-Process-Modell: Kompilierte C#-Funktion, die im gleichen Prozess wie die Functions-Runtime ausgeführt wird. In einer Variante dieses Modells kann Functions mithilfe von C#-Skripts ausgeführt werden. Dies wird hauptsächlich für die Bearbeitung im C#-Portal unterstützt. Erweiterungen für In-Process-Funktionen verwenden Microsoft.Azure.WebJobs.Extensions.*-Namespaces.

Das folgende Beispiel zeigt einen pub/sub-Trigger für das Set-Ereignis mit einer Ausgabebindung an dieselbe Redis-Instanz. Das Set-Ereignis löst den Cache aus, und die Ausgabebindung gibt einen Löschbefehl für den Schlüssel zurück, der die Funktion ausgelöst hat.

Wichtig

Für .NET-Funktionen wird die Verwendung des isolierten Workermodells gegenüber dem In-Process-Modell empfohlen. Einen Vergleich der In-Process - und isolierten Workermodelle finden Sie unter den Unterschieden zwischen dem isolierten Workermodell und dem Prozessmodell für .NET in 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 };
        }
    }
}

Das folgende Beispiel zeigt einen pub/sub-Trigger für das Set-Ereignis mit einer Ausgabebindung an dieselbe Redis-Instanz. Das Set-Ereignis löst den Cache aus, und die Ausgabebindung gibt einen Löschbefehl für den Schlüssel zurück, der die Funktion ausgelöst hat.

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

Dieses Beispiel zeigt einen Pub/Sub-Trigger für das Set-Ereignis mit einer Ausgabebindung an dieselbe Redis-Instanz. Das Set-Ereignis löst den Cache aus, und die Ausgabebindung gibt einen Löschbefehl für den Schlüssel zurück, der die Funktion ausgelöst hat.

Die Bindungen werden in dieser Datei "function.json" definiert:

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

Dieser Code aus der index.js Datei übernimmt den Schlüssel vom Trigger und gibt ihn an die Ausgabebindung zurück, um das zwischengespeicherte Element zu löschen.

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

Dieses Beispiel zeigt einen Pub/Sub-Trigger für das Set-Ereignis mit einer Ausgabebindung an dieselbe Redis-Instanz. Das Set-Ereignis löst den Cache aus, und die Ausgabebindung gibt einen Löschbefehl für den Schlüssel zurück, der die Funktion ausgelöst hat.

Die Bindungen werden in dieser function.json Datei definiert:

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

Dieser Code aus der run.ps1 Datei übernimmt den Schlüssel vom Trigger und übergibt ihn an die Ausgabebindung, um das zwischengespeicherte Element zu löschen.

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

Dieses Beispiel zeigt einen Pub/Sub-Trigger für das Set-Ereignis mit einer Ausgabebindung an dieselbe Redis-Instanz. Das Set-Ereignis löst den Cache aus, und die Ausgabebindung gibt einen Löschbefehl für den Schlüssel zurück, der die Funktion ausgelöst hat.

Die Bindungen werden in dieser function.json Datei definiert:

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

Dieser Code aus der __init__.py Datei übernimmt den Schlüssel vom Trigger und übergibt ihn an die Ausgabebindung, um das zwischengespeicherte Element zu löschen.

import logging

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

Attribute

Hinweis

Für diese Bindung werden alle Befehle unterstützt.

Die Art und Weise, in der Sie einen Ausgabebindungsparameter definieren, hängt davon ab, ob Ihre C#-Funktionen im Prozess oder in einem isolierten Arbeitsprozess ausgeführt werden.

Die Ausgabebindung wird auf diese Weise definiert:

Definition Beispiel Beschreibung
Für einen out Parameter [Redis(<Connection>, <Command>)] out string <Return_Variable> Die von der Methode zurückgegebene Zeichenfolgenvariable ist ein Schlüsselwert, den die Bindung zum Ausführen des Befehls für den jeweiligen Cache verwendet.

In diesem Fall ist der von der Methode zurückgegebene Typ ein Schlüsselwert, den die Bindung zum Ausführen des Befehls für den jeweiligen Cache verwendet.

Wenn Ihre Funktion über mehrere Ausgabebindungen verfügt, können Sie stattdessen das Bindungsattribut auf die Eigenschaft eines Typs anwenden, der ein Schlüsselwert ist, mit dem die Bindung den Befehl für den jeweiligen Cache ausführt. Weitere Informationen finden Sie unter Mehrere Ausgabebindungen.


Unabhängig vom C#-Prozessmodus werden die gleichen Eigenschaften vom Ausgabebindungsattribut unterstützt:

Attributeigenschaft Beschreibung
Connection Der Name der Anwendungseinstellung, die den Cache Verbindungszeichenfolge enthält, z. B.:<cacheName>.redis.cache.windows.net:6380,password...
Command Der Befehl "redis-cli", der im Cache ausgeführt werden soll, z. B.: DEL.

Anmerkungen

Die RedisOutput Anmerkung unterstützt diese Eigenschaften:

Eigenschaft Beschreibung
name Der Name der spezifischen Eingabebindung.
connection Der Name der Anwendungseinstellung, die den Cache Verbindungszeichenfolge enthält, z. B.:<cacheName>.redis.cache.windows.net:6380,password...
command Der Befehl "redis-cli", der im Cache ausgeführt werden soll, z. B.: DEL.

Konfiguration

Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.

Eigenschaft Beschreibung
name Der Name der spezifischen Eingabebindung.
connection Der Name der Anwendungseinstellung, die den Cache Verbindungszeichenfolge enthält, z. B.:<cacheName>.redis.cache.windows.net:6380,password...
command Der Befehl "redis-cli", der im Cache ausgeführt werden soll, z. B.: DEL.

Vollständige Beispiele finden Sie im Abschnitt Beispiele.

Verbrauch

Die Ausgabe gibt eine Zeichenfolge zurück, bei der es sich um den Schlüssel des Cacheeintrags handelt, auf den der jeweilige Befehl angewendet wird.

Es gibt drei Arten von Verbindungen, die von einer Azure Functions-Instanz zu einem Redis-Cache in Ihren Bereitstellungen zulässig sind. Für die lokale Entwicklung können Sie auch Dienstprinzipalschlüssel verwenden. Verwenden Sie die appsettings Folgenden Typen der Clientauthentifizierung, wobei davon ausgegangen wird, dass sie Connection in der Funktion festgelegt Redis wurde.