Come usare Cache Redis di Azure

Questa guida illustra come usare Cache Redis di Azure. Cache Redis di Microsoft Azure si basa sulla popolare cache Redis open source e consente di accedere a una cache Redis sicura e dedicata gestita da Microsoft. Una cache creata usando Cache Redis di Azure sarà accessibile da qualsiasi applicazione all'interno di Microsoft Azure.

Cache Redis di Microsoft Azure è disponibile nei seguenti livelli:

  • Basic: singolo nodo. Più dimensioni fino a 53 GB.
  • Standard: principale/replica a due nodi. Più dimensioni fino a 53 GB. Contratti di servizio del 99,9%.
  • Premium : principale/replica a due nodi con fino a 10 partizioni. Più dimensioni da 6 GB a 530 GB. Supporto per tutte le funzionalità del piano Standard e altre, tra cui cluster Redis, persistenza Redis e Rete virtuale di Azure. Contratti di servizio del 99,9%.

Ogni livello presenta differenze in termini di funzionalità e prezzi. Per informazioni sui prezzi, vedere Dettagli prezzi del servizio Cache.

Questa guida illustra come usare il client StackExchange.Redis con il codice C#. Gli scenari presentati includono creazione e configurazione di una cache, configurazione di client della cache e aggiunta e rimozione di oggetti dalla cache. Per altre informazioni sull'uso di Cache Redis di Azure, vedere i Passaggi successivi. Per un'esercitazione dettagliata sulla creazione di un'app Web ASP.NET MVC con la cache Redis, vedere Come creare un'app Web con la cache Redis.

Introduzione all'uso di Cache Redis di Azure

Iniziare a usare Cache Redis di Azure è semplice. Innanzitutto, è necessario eseguire il provisioning e la configurazione di una cache. Successivamente, verranno configurati i client della cache affinché possano accedere alla cache. Dopo avere configurato i client della cache, è possibile iniziare a utilizzarli.

Creare una cache

Per creare una cache, accedere al portale di Azure e fare clic su Nuovo > Database > Cache Redis.

Nota

Se non si ha un account Azure, è possibile creare un account Azure gratuito in pochi minuti.

New cache

Nota

Oltre a creare cache nel portale di Azure, è possibile crearle usando modelli di Resource Manager, PowerShell o l'interfaccia della riga di comando di Azure.

Nel pannello Nuova cache Redis specificare la configurazione desiderata per la cache.

Create cache

  • In Nome DNSimmettere il nome univoco di una cache da usare per l'endpoint della cache. Il nome della cache deve essere una stringa contenente da 1 a 63 caratteri che possono includere solo numeri, lettere e il carattere - . Il nome della cache non può iniziare o terminare con il carattere - e i caratteri - consecutivi non sono validi.
  • Per Sottoscrizioneselezionare la sottoscrizione di Azure da usare per la cache. Se l'account ha una sola sottoscrizione, questa verrà selezionata automaticamente e l'elenco a discesa Sottoscrizione non verrà visualizzato.
  • In Gruppo di risorseselezionare o creare un gruppo di risorse per la cache. Per altre informazioni, vedere Uso di gruppi di risorse per gestire le risorse di Azure.
  • Usare Posizione per specificare la posizione geografica in cui viene ospitata la cache. Per prestazioni ottimali, è consigliabile creare la cache nella stessa area dell'applicazione client della cache.
  • Usare Piano tariffario per selezionare le dimensioni e le funzionalità desiderate per la cache.
  • cluster Redis consente di creare cache con dimensioni maggiori di 53 GB e di partizionare i dati su più nodi Redis. Per altre informazioni, vedere Come configurare il clustering per una Cache Redis di Azure Premium.
  • Persistenza Redis consente di rendere la cache persistente in un account di archiviazione di Azure. Per istruzioni su come configurare la persistenza, vedere Come configurare la persistenza per una Cache Redis di Azure Premium.
  • Rete virtuale fornisce isolamento e protezione avanzati limitando l'accesso alla cache ai soli client che si trovano all'interno della rete virtuale di Azure specificata. È possibile utilizzare tutte le funzionalità di rete virtuale, ad esempio subnet, i criteri di controllo di accesso e altre funzionalità per limitare ulteriormente l'accesso a Redis. Per altre informazioni, vedere Come configurare il supporto di una rete virtuale per una Cache Redis di Azure Premium.
  • Per le nuove cache la porta senza SSL è disabilitata per impostazione predefinita. Per abilitare la porta non SSL, selezionare Sblocca la porta 6379 (senza crittografia SSL).

Dopo aver configurato le opzioni della nuova cache, fare clic su Crea. La creazione della cache può richiedere alcuni minuti. Per verificare lo stato, è possibile monitorare l'avanzamento nella Schermata iniziale. Lo stato della cache dopo la creazione sarà In esecuzione e sarà possibile usarla subito con le impostazioni predefinite.

Cache created

Per accedere alla cache dopo la creazione

È possibile accedere alle cache nel portale di Azure tramite il pannello Sfoglia .

Pannello Sfoglia di Cache Redis di Azure

Per visualizzare le cache, fare clic su More services (Altri servizi) > Cache Redis. Se è stata visitata di recente una Cache Redis, è possibile fare clic su Cache Redis direttamente dall'elenco senza fare clic su More services (Altri servizi).

Selezionare la cache desiderata per visualizzare e configurare le impostazioni per tale cache.

Elenco Sfoglia cache di Cache Redis di Azure

È possibile visualizzare e configurare la cache dal pannello Cache Redis.

Tutte le impostazioni di Cache Redis

Per altre informazioni sulla configurazione della cache, vedere Come configurare Cache Redis di Azure.

Configurare i client della cache

Le applicazioni .NET possono usare il client della cache StackExchange.Redis , che può essere configurato in Visual Studio con un pacchetto NuGet per semplificare la configurazione delle applicazioni client della cache.

Nota

Per altre informazioni, vedere la pagina di Github StackExchange.Redise la documentazione del client della cache StackExchange.Redis.

Per configurare un'applicazione client in Visual Studio con il pacchetto NuGet StackExchange.Redis, fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e scegliere Gestisci pacchetti NuGet.

Manage NuGet packages

Digitare StackExchange.Redis o StackExchange.Redis.StrongName nella casella di testo di ricerca, selezionare la versione desiderata nei risultati e fare clic su Installa.

Nota

Se si preferisce usare una versione con nome sicuro della libreria client StackExchange.Redis, scegliere StackExchange.Redis.StrongName. In caso contrario, scegliere StackExchange.Redis.

StackExchange.Redis NuGet package

Il pacchetto NuGet scarica e aggiunge i riferimenti ad assembly necessari per consentire all'applicazione client di accedere a Cache Redis di Azure con il client della cache StackExchange.Redis.

Nota

Se il progetto è stato configurato per utilizzare StackExchange.Redis, è possibile controllare la presenza di aggiornamenti per il pacchetto da Gestione pacchetti NuGet. Per controllare e installare le versioni aggiornate del pacchetto NuGet StackExchange.Redis, fare clic su Aggiornamenti nella finestra di Gestione pacchetti NuGet. Se è disponibile un aggiornamento per il pacchetto NuGet StackExchange.Redis, è possibile aggiornare il progetto in modo da utilizzare la versione aggiornata.

È anche possibile installare il pacchetto NuGet StackExchange.Redis facendo clic su Gestione pacchetti NuGet, Console di Gestione pacchetti dal menu Strumenti ed eseguendo questo comando dalla finestra Console di Gestione pacchetti.

Install-Package StackExchange.Redis

Dopo avere configurato il progetto client per la memorizzazione nella cache, è possibile utilizzare le tecniche descritte nelle sezioni seguenti per utilizzare la cache.

Utilizzo delle cache

Nelle procedure riportate in questa sezione viene descritto come eseguire attività comuni con il Servizio cache.

Connettersi alla cache

Per usare una cache a livello di codice, è necessario un riferimento alla cache. Aggiungere l'elemento seguente nella parte superiore di ogni file da cui usare il client StackExchange.Redis per accedere a un'istanza di Cache Redis di Azure.

using StackExchange.Redis;

Nota

Con il client StackExchange.Redis è richiesto .NET Framework 4 o versione successiva.

La connessione a Cache Redis di Azure è gestita dalla classe ConnectionMultiplexer . Questa classe è concepita in modo da essere condivisa e riusata nell'applicazione client e non deve essere creata per ogni singola operazione.

Per connettersi a Cache Redis di Azure e ricevere un'istanza di un elemento connesso ConnectionMultiplexer, chiamare il metodo statico Connect e passare la chiave e l'endpoint della cache. Usare la chiave generata dal Portale di Azure come parametro della password.

ConnectionMultiplexer connection = ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");

Importante

Avviso: non archiviare mai le credenziali nel codice sorgente. Per semplicità però in questo esempio saranno visibili nel codice sorgente. Per informazioni su come archiviare le credenziali, vedere How Application Strings and Connection Strings Work (Funzionamento delle stringe applicazione e delle stringhe di connessione).

Se non si vuole usare SSL, impostare ssl=false oppure omettere il parametro ssl.

Nota

Per le nuove cache la porta senza SSL è disabilitata per impostazione predefinita. Per istruzioni su come abilitare la porta non SSL, vedere Porte di accesso.

Un approccio per la condivisione di un'istanza di ConnectionMultiplexer nell'applicazione prevede una proprietà statica che restituisce un'istanza connessa, simile a quanto illustrato nell'esempio seguente. Questo approccio costituisce un modo thread-safe per inizializzare solo una singola istanza di ConnectionMultiplexer connessa. In questi esempi la proprietà abortConnect è impostata su false, a indicare che la chiamata riuscirà anche se non viene stabilita una connessione a Cache Redis di Azure. Una delle funzionalità principali di ConnectionMultiplexer è il ripristino automatico della connettività alla cache non appena l'errore di rete o eventuali altri problemi vengono risolti.

private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
    return ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");
});

public static ConnectionMultiplexer Connection
{
    get
    {
        return lazyConnection.Value;
    }
}

Per altre informazioni sulle opzioni di configurazione avanzate per la connessione, vedere Modello di configurazione di StackExchange.Redis.

Per connettersi a un'istanza Cache Redis di Azure, è necessario specificare il nome host, le porte e le chiavi della cache. Alcuni client possono fare riferimento a questi elementi usando nomi leggermente diversi. È possibile recuperare queste informazioni nel portale di Azure o usando strumenti da riga di comando come l'interfaccia della riga di comando di Azure.

Recuperare il nome dell'host, le porte e le chiavi di accesso usando il portale di Azure

Per recuperare il nome dell'host, le porte e le chiavi di accesso usando il portale di Azure, passare alla cache nel portale di Azure e scegliere Chiavi di accesso e Proprietà dal menu Risorsa.

Impostazioni della Cache Redis

Recuperare il nome dell'host, le porte e le chiavi di accesso usando l'interfaccia della riga di comando di Azure

Per recuperare il nome dell'host e le porte usando l'interfaccia della riga di comando di Azure 2.0, è possibile chiamare az redis show e per recuperare le chiavi è possibile chiamare az redis list-keys. Lo script seguente chiama questi due comandi e restituisce il nome dell'host, le porte e le chiavi alla console.

#/bin/bash

# Retrieve the hostname, ports, and keys for contosoCache located in contosoGroup

# Retrieve the hostname and ports for an Azure Redis Cache instance
redis=($(az redis show --name contosoCache --resource-group contosoGroup --query [hostName,enableNonSslPort,port,sslPort] --output tsv))

# Retrieve the keys for an Azure Redis Cache instance
keys=($(az redis list-keys --name contosoCache --resource-group contosoGroup --query [primaryKey,secondaryKey] --output tsv))

# Display the retrieved hostname, keys, and ports
echo "Hostname:" ${redis[0]}
echo "Non SSL Port:" ${redis[2]}
echo "Non SSL Port Enabled:" ${redis[1]}
echo "SSL Port:" ${redis[3]}
echo "Primary Key:" ${keys[0]}
echo "Secondary Key:" ${keys[1]}

Per altre informazioni su questo script, vedere Get the hostname, ports, and keys for Azure Redis Cache (Recuperare il nome dell'host, le porte e le chiavi per Cache Redis di Azure). Per altre informazioni sull'interfaccia della riga di comando di Azure 2.0, vedere Install Azure CLI 2.0 (Installare l'interfaccia della riga di comando di Azure 2.0) e Get started with Azure CLI 2.0 (Introduzione all'interfaccia della riga di comando di Azure 2.0).

Dopo aver stabilito la connessione, restituire un riferimento al database di Cache Redis chiamando il metodo ConnectionMultiplexer.GetDatabase . L’oggetto restituito dal metodo GetDatabase è un oggetto pass-through leggero che non è necessario archiviare.

// Connection refers to a property that returns a ConnectionMultiplexer
// as shown in the previous example.
IDatabase cache = Connection.GetDatabase();

// Perform cache operations using the cache object...
// Simple put of integral data types into the cache
cache.StringSet("key1", "value");
cache.StringSet("key2", 25);

// Simple get of data types from the cache
string key1 = cache.StringGet("key1");
int key2 = (int)cache.StringGet("key2");

Le cache Redis di Azure hanno un numero configurabile di database (16 per impostazione predefinita) che possono essere usati per separare in modo logico i dati all'interno di una cache Redis. Per altre informazioni, vedere Informazioni sui database Redis e Configurazione predefinita del server Redis.

A questo punto, dopo aver imparato a connettersi a un'istanza di Cache Redis di Azure e a restituire un riferimento al database della cache, verrà esaminato il funzionamento della cache.

Aggiungere e recuperare oggetti dalla cache

Per archiviare e recuperare gli elementi nella cache, è possibile usare i metodi StringSet e StringGet.

// If key1 exists, it is overwritten.
cache.StringSet("key1", "value1");

string value = cache.StringGet("key1");

Redis archivia la maggior parte dei dati come stringhe Redis, tuttavia queste stringhe possono contenere molti tipi di dati, inclusi dati binari serializzati, utilizzabili durante la memorizzazione di oggetti .NET nella cache.

Quando si chiama StringGet, viene restituito l'oggetto, se esistente; in caso contrario, viene restituito null. Se viene restituito null, è possibile recuperare il valore dall'origine dati desiderata e memorizzarlo nella cache per usarlo in seguito. Questo modello di utilizzo è noto come modello cache-aside.

string value = cache.StringGet("key1");
if (value == null)
{
    // The item keyed by "key1" is not in the cache. Obtain
    // it from the desired data source and add it to the cache.
    value = GetValueFromDataSource();

    cache.StringSet("key1", value);
}

È anche possibile usare RedisValue, come illustrato nell'esempio seguente. RedisValue ha operatori impliciti per l'uso di tipi di dati integrali e può essere utile se null è un valore previsto per un elemento memorizzato nella cache.

RedisValue value = cache.StringGet("key1");
if (!value.HasValue)
{
    value = GetValueFromDataSource();
    cache.StringSet("key1", value);
}

Per specificare la scadenza di un elemento nella cache, usare il parametro TimeSpan di StringSet.

cache.StringSet("key1", "value1", TimeSpan.FromMinutes(90));

Gestire gli oggetti .NET nella cache

Cache Redis di Azure è in grado di memorizzare nella cache sia oggetti .NET che tipi di dati primitivi, ma prima della memorizzazione nella cache un oggetto .NET deve essere serializzato. La serializzazione di un oggetto .NET spetta allo sviluppatore dell'applicazione, che può scegliere liberamente il serializzatore da usare.

Un modo semplice per serializzare gli oggetti prevede l'uso dei metodi di serializzazione JsonConvert in Newtonsoft.Json.NET ed eseguire la serializzazione a e da JSON. L'esempio seguente mostra le operazioni Get e Set usando un'istanza dell'oggetto Employee .

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

    public Employee(int EmployeeId, string Name)
    {
        this.Id = EmployeeId;
        this.Name = Name;
    }
}

// Store to cache
cache.StringSet("e25", JsonConvert.SerializeObject(new Employee(25, "Clayton Gragg")));

// Retrieve from cache
Employee e25 = JsonConvert.DeserializeObject<Employee>(cache.StringGet("e25"));

Passaggi successivi

A questo punto, dopo aver appreso le nozioni di base, visitare i collegamenti seguenti per altre informazioni sulla Cache Redis di Azure.