Uso di una cache distribuita Redis
In un'app nativa del cloud alcuni team separati creano microservizi con le tecnologie preferite in base alle proprie pianificazioni. I microservizi funzionano in genere in modo completamente indipendente. Possono trarre vantaggio dalla memorizzazione nella cache, ma, se eseguono cache separate, potrebbero non essere in grado di realizzare il miglioramento ottimale delle prestazioni. Se si fornisce una singola cache per più microservizi, questi servizi possono recuperare dalla cache informazioni archiviate da un altro microservizio.
Si supponga di lavorare per un rivenditore di attrezzature da esterno. Si è deciso di implementare la memorizzazione nella cache usando un server Redis nel microservizio del carrello acquisti. Tuttavia, ci si vuole anche assicurare che altri microservizi possano trarre vantaggio dalle informazioni memorizzate nella cache.
In questa unità verrà illustrato il modo in cui una cache Redis distribuita può ottimizzare le prestazioni per più microservizi nell'app. Verrà illustrato anche il modo in cui .NET Aspire semplifica l'implementazione di una cache distribuita.
Che cos'è la memorizzazione nella cache distribuita?
Una cache distribuita è una cache condivisa tra diversi servizi chiamante. In un'applicazione nativa del cloud i servizi chiamanti sono in genere microservizi. Quando si archiviano nella cache distribuita alcune informazioni, ad esempio i dettagli di un prodotto molto apprezzato nel catalogo, tutti i microservizi nell'app possono potenzialmente usarle e ottenere un miglioramento delle prestazioni.
Configurazione della memorizzazione nella cache distribuita in .NET Aspire
Per usare la memorizzazione nella cache distribuita, sono necessarie modifiche sia nel progetto host dell'app sia nei microservizi che usano la cache.
Configurare l'host dell'app
Nel progetto host dell'app della soluzione installare prima di tutto il componente host di memorizzazione nella cache distribuita:
dotnet add package Aspire.Hosting.Redis --prerelease
In alternativa, è possibile usare il collegamento Aggiungi > Componente .NET Aspire in Visual Studio per installare il componente dalla gestione pacchetti di NuGet:
Dopo l'installazione del componente host, il codice nel file Program.cs dell'host dell'app registra la cache e la passa ai progetti che usano la cache:
// Register the cache
var redis = builder.AddRedis("redis");
// Initiate the consuming project and pass the cache
builder.AddProject<Projects.ConsumingProject>()
.WithReference(redis);
Configurare i progetti che utilizzano la cache
Per installare il componente .NET Aspire Distributed Cache in un microservizio, usare un comando simile al seguente nei progetti di .NET Aspire:
dotnet add package Aspire.StackExchange.Redis.DistributedCache --prerelease
Anche in questo caso è possibile scegliere di usare gestione pacchetti NuGet come alternativa per installare il componente:
Uso di una cache distribuita
In qualsiasi progetto in cui si vuole usare la cache, è necessario ottenere un oggetto cache distribuita, che rappresenta la connessione a Redis. Nel file Program.cs questo codice registra la cache distribuita:
builder.AddRedisDistributedCache("cache")
Dopo aver registrato la cache nel progetto che la utilizza, è possibile recuperare la cache distribuita ogni volta che è necessaria usando l'inserimento delle dipendenze:
public class MyService(IDistributedCache cache)
{
public async Task InitializeAsync()
{
// Check if there is cached content
var cachedInfo = await cache.GetAsync("myinfo")
if (cachedInfo is null)
{
// There's no content in the cache so formulate it here
// For example, query databases.
// Store the content in the cache
await cache.SetAsync("myinfo", cachedInformation, new()
{ AbsoluteExpiration = DateTime.Now.AddSeconds(60) }
);
}
}
}
Impostazione
Affinché i microservizi si connettano alla cache distribuita Redis, è necessario indicare dove si trova fornendo una stringa di connessione. La chiamata precedente al metodo AddRedisDistributedCache()
ha specificato una stringa di connessione denominata redis
.
Usare una sezione ConnectionStrings
nel file di configurazione, ad esempio in appsettings.json, per configurare la stringa di connessione:
{
"ConnectionStrings": {
"redis": "redis.contoso.com:6379"
}
}
È anche possibile usare appsettings.json per configurare il comportamento del componente di memorizzazione nella cache distribuita. Ad esempio, questo codice configura la connessione in modo che venga raggiunto il timeout dopo cinque secondi e che vengano eseguiti tre tentativi:
{
"Aspire": {
"StackExchange": {
"Redis": {
"ConfigurationOptions": {
"ConnectTimeout": 5000,
"ConnectRetry": 3
}
}
}
}
}
È anche possibile configurare la connessione usando delegati inline nel metodo AddRedisDistributedCache()
. Questo codice configura le stesse proprietà dell'esempio JSON precedente:
builder.AddRedisDistributedCache(
"redis",
configureOptions: options => options.ConnectTimeout = 5000
);
Altre informazioni
- Componente di memorizzazione nella cache distribuita di .NET Aspire StackExchange Redis
- Configurazione di StackExchange Redis