Schnellstart: Verwenden von Azure Cache for Redis mit einer .NET-App

In diesem Schnellstart integrieren Sie Azure Cache for Redis in eine .NET-App, um Zugriff auf einen sicheren, dedizierten Cache zu erhalten, der von jeder Anwendung in Azure aus zugänglich ist. Sie verwenden insbesondere den StackExchange.Redis-Client mit C#-Code in einer .NET-Konsolen-App.

Direktes Navigieren zum Code auf GitHub

In diesem Artikel wird beschrieben, wie Sie den Code für eine Beispiel-App ändern, um eine funktionierende App zu erstellen, die eine Verbindung mit Azure Cache for Redis herstellt.

Wenn Sie direkt mit dem Code fortfahren möchten, sehen Sie sich das .NET-Schnellstartbeispiel auf GitHub an.

Voraussetzungen

Erstellen eines Caches

  1. Melden Sie sich zum Erstellen eines Cache beim Azure-Portal an. Wählen Sie im Menü des Portals Ressource erstellen aus.

    Sceenshot: Hervorgehobene Option „Ressource erstellen“ im linken Navigationsbereich des Azure-Portals

  2. Geben Sie auf der Seite Erste Schritte den Begriff Azure Cache for Redis in das Suchfeld ein. Suchen Sie in den Suchergebnissen Azure Cache for Redis, und wählen Sie dann Erstellen aus.

    Screenshot, der Azure Marketplace mit Azure Cache for Redis im Suchfeld zeigt. Die Schaltfläche „Erstellen“ ist hervorgehoben.

  3. Konfigurieren Sie im Bereich Neuer Redis Cache auf der Registerkarte Grundlagen die folgenden Einstellungen für Ihren Cache:

    Einstellung Aktion Beschreibung
    Abonnement Wählen Sie Ihr Azure-Abonnement. Das Abonnement, das zum Erstellen der neuen Instanz von Azure Cache for Redis verwendet werden soll.
    Ressourcengruppe Wählen Sie eine Ressourcengruppe aus, oder wählen Sie Neu erstellen aus, und geben Sie einen Namen für eine neue Ressourcengruppe ein. Einen Namen für die Ressourcengruppe, in der Ihr Cache und weitere Ressourcen erstellt werden. Wenn Sie alle Ihre App-Ressourcen in einer Ressourcengruppe zusammenfassen, können Sie sie einfacher gemeinsam verwalten oder löschen.
    DNS-Name Geben Sie einen eindeutigen Namen ein. Der Cachename muss eine Zeichenfolge von 1 bis 63 Zeichen sein, die nur Zahlen, Buchstaben und Bindestriche enthalten darf. Der Name muss mit einer Zahl oder einem Buchstaben beginnen und enden und darf keine aufeinanderfolgenden Bindestriche enthalten. Der Hostname Ihrer Cache-Instanz ist \<DNS name>.redis.cache.windows.net.
    Location Wählen Sie einen Standort aus. Eine Azure-Region, die sich in der Nähe anderer Dienste befindet, die Ihren Cache verwenden
    Cache-SKU Wählen Sie eine SKU aus. Die SKU bestimmt die Parameter für Größe, Leistung und Features, die für den Cache verfügbar sind. Weitere Informationen finden Sie unter Azure Cache for Redis.
    Cachegröße Wählen Sie eine Cachegröße aus. Weitere Informationen finden Sie unter Azure Cache for Redis.
  4. Wählen Sie die Registerkarte Netzwerk oder Weiter: Netzwerk aus.

  5. Wählen Sie auf der Registerkarte Netzwerk eine Konnektivitätsmethode für den Cache aus.

  6. Wählen Sie die Registerkarte Erweitert oder Weiter: Erweitert aus.

  7. Überprüfen Sie im Bereich Erweitert die Authentifizierungsmethode basierend auf den folgenden Informationen, oder wählen Sie eine aus:

    Screenshot: Bereich „Erweitert“ und zur Auswahl stehende Optionen

    • Standardmäßig ist für einen neuen Basic-, Standard- oder Premium-Cache die Microsoft Entra-Authentifizierung aktiviert und die Authentifizierung mit Zugriffsschlüsseln deaktiviert.
    • Für Basic- oder Standard-Caches können Sie sich für die Auswahl eines Nicht-TLS-Ports entscheiden.
    • Für Standard- und Premium-Caches können Sie Verfügbarkeitszonen aktivieren. Verfügbarkeitszonen können nach der Erstellung des Caches nicht deaktiviert werden.
    • Konfigurieren Sie für ein Premium-Cache die Einstellungen für einen Nicht-TLS-Port, das Clustering, die verwaltete Identität und die Datenpersistenz.

    Wichtig

    Verwenden Sie für optimale Sicherheit nach Möglichkeit Microsoft Entra ID mit verwalteten Identitäten, um Anforderungen für Ihren Cache zu autorisieren. Die Autorisierung mit Microsoft Entra ID und verwalteten Identitäten bietet eine höhere Sicherheit und Benutzerfreundlichkeit als die Autorisierung mit einem Schlüssel für den gemeinsamen Zugriff. Weitere Informationen zum Verwenden verwalteter Identitäten mit Ihren Caches finden Sie unter Verwenden von Microsoft Entra ID für die Cacheauthentifizierung.

  8. (Optional) Wählen Sie die Registerkarte Kategorien oder Weiter: Kategorien aus.

  9. Geben Sie optional auf der Registerkarte Kategorien den Namen und den Wert ein, wenn Sie die Cacheressource kategorisieren möchten.

  10. Wählen Sie die Schaltfläche Überprüfen + erstellen aus.

    Auf der Registerkarte Überprüfen + Erstellen überprüft Azure automatisch Ihre Konfiguration.

  11. Wenn die grüne Meldung Validierung erfolgreich angezeigt wird, wählen Sie Erstellen aus.

Der neue Cache wird bereitgestellt. Dies dauert einige Minuten. Sie können den Fortschritt der Bereitstellung im Azure Cache for Redis-Übersichtsbereich überwachen. Wenn als Status der Wert Wird ausgeführt angezeigt wird, kann der Cache verwendet werden.

Abrufen des Hostnamens, der Ports und des Zugriffsschlüssels

Um Ihren Azure Cache for Redis-Server zu verbinden, benötigt der Cacheclient den Hostnamen des Caches, die Ports und einen Zugriffsschlüssel. Einige Clients verweisen möglicherweise mit geringfügig anderen Namen auf diese Elemente. Sie finden Hostname, Ports und Schlüssel im Azure-Portal.

  • So rufen Sie einen Zugriffsschlüssel für Ihren Cache ab

    1. Navigieren Sie im Azure-Portal zu Ihrem Cache.
    2. Wählen Sie im Dienstmenü unter Einstellungen die Option Authentifizierung aus.
    3. Wählen Sie im Bereich Authentifizierung die Registerkarte Zugriffsschlüssel aus.
    4. Um den Wert für einen Zugriffsschlüssel zu kopieren, wählen Sie im Schlüsselfeld das Symbol Kopieren aus.

    Screenshot, der zeigt, wie Sie einen Zugriffsschlüssel für eine Instanz von Azure Cache for Redis suchen und kopieren.

  • So rufen Sie den Hostnamen und die Ports für Ihren Cache ab

    1. Navigieren Sie im Azure-Portal zu Ihrem Cache.
    2. Wählen Sie im Dienstmenü die Option Übersicht aus.
    3. Wählen Sie unter Grundlegende Features für den Hostnamen das Symbol Kopieren aus, um den Hostnamenwert zu kopieren. Der Hostnamenwert weist das Format <DNS name>.redis.cache.windows.net auf.
    4. Wählen Sie für Ports das Symbol Kopieren aus, um die Portwerte zu kopieren.

    Screenshot, der zeigt, wie Sie den Hostnamen und die Ports für eine Instanz von Azure Cache for Redis suchen und kopieren.

  1. Erstellen Sie auf Ihrem Computer eine Datei mit dem Namen CacheSecrets.config. Platzieren Sie sie im Ordner *C:\AppSecrets*.

  2. Bearbeiten Sie die Datei CacheSecrets.config, und fügen Sie ihr folgende Inhalte hinzu:

    <appSettings>
        <add key="CacheConnection" value="<host-name>,abortConnect=false,ssl=true,allowAdmin=true,password=<access-key>"/>
    </appSettings>
    
    • Ersetzen Sie <host-name> durch den Cachehostnamen.

    • Ersetzen Sie <access-key> durch den Primärschlüssel für Ihren Cache.

  3. Speichern Sie die Datei .

Konfigurieren des Cacheclients

In diesem Abschnitt bereiten Sie die Konsolenanwendung für die Verwendung des StackExchange.Redis-Clients für .NET vor.

  1. Wählen Sie in Visual Studio Tools>NuGet-Paketmanager>Paketmanager-Konsole aus. Führen Sie im Fenster „Paket-Manager-Konsole“ den folgenden Befehl aus:

    Install-Package StackExchange.Redis
    
  2. Nach Abschluss der Installation kann der StackExchange.Redis-Cacheclient für Ihr Projekt verwendet werden.

Verbinden mit dem Cache für Geheimnisse

Öffnen Sie in Visual Studio Ihre Datei App.config, um zu überprüfen, ob sie ein appSettingsfile-Attribut enthält, das auf die Datei CacheSecrets.config verweist:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>

    <appSettings file="C:\AppSecrets\CacheSecrets.config"></appSettings>
</configuration>

Speichern Sie niemals Anmeldeinformationen in Ihrem Quellcode. Um dieses Beispiel einfach zu halten, wird hier nur eine externe Konfigurationsdatei für Geheimnisse verwendet. Ein besserer Ansatz wäre die Nutzung von Azure Key Vault mit Zertifikaten.

Herstellen einer Verbindung mit dem Cache mittels RedisConnection

Die Verbindung mit Ihrem Cache wird von der RedisConnection-Klasse verwaltet. Erstellen Sie zunächst die Verbindung in dieser Anweisung in der Datei Program.cs:

     _redisConnection = await RedisConnection.InitializeAsync(connectionString: ConfigurationManager.AppSettings["CacheConnection"].ToString());


Der Wert der Appeinstellung CacheConnection wird verwendet, um über das Azure-Portal auf die Cacheverbindungszeichenfolge als Kennwortparameter zu verweisen.

In RedisConnection.cs wird der StackExchange.Redis-Namespace als using-Anweisung angezeigt, die die RedisConnection-Klasse erfordert:

using StackExchange.Redis;

Der Code der RedisConnection-Klasse stellt sicher, dass immer eine fehlerfreie Verbindung mit dem Cache besteht. Die Verbindung wird über die ConnectionMultiplexer-Instanz in „StackExchange.Redis“ verwaltet. Die RedisConnection-Klasse erstellt die Verbindung neu, wenn eine Verbindung getrennt wird und nicht automatisch wiederhergestellt werden kann.

Weitere Informationen finden Sie unter StackExchange.Redis und im Code im GitHub-Repository „StackExchange.Redis“.

Ausführen von Cachebefehlen

In der Datei Program.cs wird für die RunRedisCommandsAsync-Methode in der Program-Klasse der Konsolenanwendung der folgende Code angezeigt:

private static async Task RunRedisCommandsAsync(string prefix)
    {
        // Simple PING command
        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: PING");
        RedisResult pingResult = await _redisConnection.BasicRetryAsync(async (db) => await db.ExecuteAsync("PING"));
        Console.WriteLine($"{prefix}: Cache response: {pingResult}");

        // Simple get and put of integral data types into the cache
        string key = "Message";
        string value = "Hello! The cache is working from a .NET console app!";

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: GET {key} via StringGetAsync()");
        RedisValue getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync(key));
        Console.WriteLine($"{prefix}: Cache response: {getMessageResult}");

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: SET {key} \"{value}\" via StringSetAsync()");
        bool stringSetResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringSetAsync(key, value));
        Console.WriteLine($"{prefix}: Cache response: {stringSetResult}");

        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache command: GET {key} via StringGetAsync()");
        getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync(key));
        Console.WriteLine($"{prefix}: Cache response: {getMessageResult}");

        // Store serialized object to cache
        Employee e007 = new Employee("007", "Davide Columbo", 100);
        stringSetResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringSetAsync("e007", JsonSerializer.Serialize(e007)));
        Console.WriteLine($"{Environment.NewLine}{prefix}: Cache response from storing serialized Employee object: {stringSetResult}");

        // Retrieve serialized object from cache
        getMessageResult = await _redisConnection.BasicRetryAsync(async (db) => await db.StringGetAsync("e007"));
        Employee e007FromCache = JsonSerializer.Deserialize<Employee>(getMessageResult);
        Console.WriteLine($"{prefix}: Deserialized Employee .NET object:{Environment.NewLine}");
        Console.WriteLine($"{prefix}: Employee.Name : {e007FromCache.Name}");
        Console.WriteLine($"{prefix}: Employee.Id   : {e007FromCache.Id}");
        Console.WriteLine($"{prefix}: Employee.Age  : {e007FromCache.Age}{Environment.NewLine}");
    }


Cacheelemente können mit den Methoden StringSetAsync und StringGetAsync gespeichert und abgerufen werden.

Im Beispiel können Sie sehen, dass der Message-Schlüssel auf den Wert festgelegt ist. Die App hat diesen zwischengespeicherten Wert aktualisiert. Außerdem hat die App den Befehl PING ausgeführt.

Arbeiten mit .NET-Objekten im Cache

Der Redis-Server speichert die meisten Daten als Zeichenfolgen. Diese können jedoch unterschiedliche Datentypen enthalten, inklusive serialisierter Binärdaten, die zum Speichern von .NET-Objekten im Cache verwendet werden können.

Azure Cache for Redis kann sowohl .NET-Objekte als auch primitive Datentypen zwischenspeichern. .NET-Objekte müssen allerdings zuvor serialisiert werden.

Diese Serialisierung von .NET-Objekten liegt in der Verantwortung der Anwendungsentwickler. Sie haben eine gewisse Flexibilität bei der Wahl des Serialisierungsmoduls.

Eine einfache Möglichkeit zum Serialisieren von Objekten stellt die Verwendung der JsonConvert-Serialisierungsmethoden in System.text.Json dar.

Fügen Sie den System.text.Json-Namespace in Visual Studio hinzu:

  1. Wählen Sie Extras>NuGet-Paket-Manager>Paket-Manager-Konsole* aus.

  2. Führen Sie dann im Fenster „Paket-Manager-Konsole“ den folgenden Befehl aus:

    Install-Package system.text.json
    

Die folgende Employee-Klasse wurde in Program.cs definiert, damit mit dem Beispiel gezeigt werden kann, wie ein serialisiertes Objekt abgerufen und festgelegt wird:

class Employee
{
    public string Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }

    public Employee(string employeeId, string name, int age)
    {
        Id = employeeId;
        Name = name;
        Age = age;
    }
}

Ausführen des Beispiels

Drücken Sie STRG+F5, um die Konsolen-App zum Testen der Serialisierung von .NET-Objekten zu erstellen und auszuführen.

Screenshot: abgeschlossene Konsolen-App

Bereinigen von Ressourcen

Wenn Sie die in diesem Artikel erstellten Ressourcen weiterhin verwenden möchten, behalten Sie die Ressourcengruppe bei.

Wenn Sie die Ressourcen nicht mehr benötigen, können Sie die erstellte Azure-Ressourcengruppe löschen, um Kosten im Zusammenhang mit den Ressourcen zu vermeiden.

Warnung

Das Löschen einer Ressourcengruppe kann nicht rückgängig gemacht werden. Beim Löschen einer Ressourcengruppe werden alle darin enthaltenen Ressourcen endgültig gelöscht. Achten Sie daher darauf, dass Sie nicht versehentlich die falsche Ressourcengruppe oder die falschen Ressourcen löschen. Falls Sie die Ressourcen in einer vorhandenen Ressourcengruppe erstellt haben, die Ressourcen enthält, die Sie behalten möchten, können Sie anstelle der Ressourcengruppe alle Ressourcen einzeln löschen.

Löschen einer Ressourcengruppe

  1. Melden Sie sich beim Azure-Portal an, und wählen Sie anschließend Ressourcengruppen aus.

  2. Wählen Sie die zu löschende Ressourcengruppe aus.

    Wenn viele Ressourcengruppen vorhanden sind, geben Sie im Feld Nach einem beliebigen Feld filtern den Namen der Ressourcengruppe ein, die Sie für diesen Artikel erstellt haben. Wählen Sie in der Liste der Suchergebnisse die Ressourcengruppe aus.

    Screenshot: Liste der Ressourcengruppen, die zum Löschen ausgewählt werden können

  3. Wählen Sie die Option Ressourcengruppe löschen.

  4. Geben Sie im Bereich Ressourcengruppe löschen zur Bestätigung den Namen Ihrer Ressourcengruppe ein, und wählen Sie dann Löschen aus.

    Screenshot: Feld für die Eingabe des Ressourcennamens, um den Löschvorgang zu bestätigen

Innerhalb kurzer Zeit werden die Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht.