Azure Cache für Redis-Eingabebindung für Azure Functions
Wenn eine Funktion ausgeführt wird, ruft der Azure Cache für Redis-Eingabebindung Daten aus einem Cache ab und übergibt sie als Eingabeparameter an Ihre Funktion.
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.
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.
Der folgende Code verwendet den Schlüssel aus dem pub/sub-Trigger, um den Wert aus einer Eingabebindung mithilfe eines GET
Befehls abzurufen und zu protokollieren:
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}'");
}
}
}
Weitere Beispiele für die Eingabebindung von Azure Cache für Redis sind im GitHub-Repository verfügbar.
Der folgende Code verwendet den Schlüssel aus dem pub/sub-Trigger, um den Wert aus einer Eingabebindung mithilfe eines GET
Befehls abzurufen und zu protokollieren:
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 + "'");
}
}
Diese function.json definiert sowohl einen Pub/Sub-Trigger als auch eine Eingabebindung an die GET-Nachricht in einem Azure Cache für Redis-Instanz:
{
"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"
}
Dieser JavaScript-Code (aus index.js) wiederholt und protokolliert den zwischengespeicherten Wert im Zusammenhang mit dem schlüssel, der vom pub/sub-Trigger bereitgestellt wird.
module.exports = async function (context, key, value) {
context.log("Key '" + key + "' was set to value '" + value + "'");
}
Diese function.json definiert sowohl einen Pub/Sub-Trigger als auch eine Eingabebindung an die GET-Nachricht in einem Azure Cache für Redis-Instanz:
{
"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"
}
Dieser PowerShell-Code (aus run.ps1) ruft den zwischengespeicherten Wert ab, der mit dem vom pub/sub-Trigger bereitgestellten Schlüssel verknüpft ist.
param($key, $value, $TriggerMetadata)
Write-Host "Key '$key' was set to value '$value'"
Im folgenden Beispiel wird ein pub/sub-Trigger mit einer Eingabebindung an die GET-Nachricht in einer Azure Cache für Redis-Instanz verwendet. Das Beispiel hängt davon ab, ob Sie das Python-Programmiermodell v1 oder v2 verwenden.
Diese function.json definiert sowohl einen Pub/Sub-Trigger als auch eine Eingabebindung an die GET-Nachricht in einem Azure Cache für Redis-Instanz:
{
"bindings": [
{
"type": "redisPubSubTrigger",
"connection": "redisConnectionString",
"channel": "__keyevent@0__:set",
"name": "key",
"direction": "in"
},
{
"type": "redis",
"connection": "redisConnectionString",
"command": "GET {Message}",
"name": "value",
"direction": "in"
}
]
}
Dieser Python-Code (aus __init__.py) wiederholt und protokolliert den zwischengespeicherten Wert im Zusammenhang mit dem schlüssel, der vom pub/sub-Trigger bereitgestellt wird:
import logging
def main(key: str, value: str):
logging.info("Key '" + key + "' was set to value '" + value + "'")
Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.
Attribute
Hinweis
Nicht alle Befehle werden für diese Bindung unterstützt. Derzeit werden nur Lesebefehle unterstützt, die eine einzelne Ausgabe zurückgeben. Die vollständige Liste finden Sie hier.
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, wobei alle Argumente durch Leerzeichen getrennt sind, z. B.: GET key , HGET key field . |
Anmerkungen
Die RedisInput
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, wobei alle Argumente durch Leerzeichen getrennt sind, z. B.: GET key oder HGET key field . |
Konfiguration
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.
function.json-Eigenschaft | 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, wobei alle Argumente durch Leerzeichen getrennt sind, z. B.: GET key , HGET key field . |
Hinweis
Python v2 und Node.js v4 für Funktionen verwenden nicht function.json zum Definieren der Funktion. Beide neuen Sprachversionen werden derzeit nicht von Azure Redis Cache-Bindungen unterstützt.
Vollständige Beispiele finden Sie im Abschnitt Beispiele.
Verbrauch
Die Eingabebindung erwartet, dass eine Zeichenfolge aus dem Cache empfangen wird.
Wenn Sie einen benutzerdefinierten Typ als Bindungsparameter verwenden, versucht die Erweiterung, eine JSON-formatierte Zeichenfolge in den benutzerdefinierten Typ dieses Parameters zu deserialisieren.