Een gedistribueerde Redis-cache gebruiken
In een cloudeigen app bouwen afzonderlijke teams microservices met hun voorkeurstechnologieën volgens hun eigen planningen. De microservices werken meestal volledig onafhankelijk. Ze kunnen profiteren van caching, maar als ze afzonderlijke caches uitvoeren, kunnen ze mogelijk niet de optimale prestatieverbetering realiseren. Als u één cache voor meerdere microservices opgeeft, kunnen deze services informatie ophalen uit de cache die is opgeslagen door een andere microservice.
Stel dat u werkt voor een winkel voor buitenapparatuur. U hebt besloten om caching te implementeren met behulp van een Redis-server in uw winkelwagen microservice. U wilt er echter ook voor zorgen dat andere microservices kunnen profiteren van de informatie die u in de cache opgeslagen hebt.
In deze les leert u hoe een gedistribueerde Redis-cache de prestaties voor meerdere microservices in uw app kan optimaliseren. U ziet ook hoe .NET Aspire het eenvoudig maakt om een gedistribueerde cache te implementeren.
Wat is gedistribueerde caching?
Een gedistribueerde cache is een cache die wordt gedeeld tussen verschillende aanroepende services. In een cloudeigen toepassing zijn de aanroepende services meestal microservices. Wanneer u bepaalde informatie opslaat, bijvoorbeeld de details van een populair product in uw catalogus, in de gedistribueerde cache, kunnen alle microservices in uw app deze mogelijk gebruiken en profiteren van de prestatieverbetering.
Gedistribueerde caching instellen in .NET Aspire
Voor het gebruik van gedistribueerde caching zijn wijzigingen vereist in zowel het app-hostproject als de microservices die gebruikmaken van de cache.
De app-host configureren
Begin in het app-hostproject van uw oplossing door het hostonderdeel gedistribueerde caching te installeren:
dotnet add package Aspire.Hosting.Redis --prerelease
U kunt ook de snelkoppeling .NET Aspire Component toevoegen > in Visual Studio gebruiken om het onderdeel te installeren vanuit NuGet-pakketbeheer:
Zodra het hostingonderdeel is geïnstalleerd, registreert code in het Program.cs-bestand van de app-host de cache en geeft deze door aan projecten die gebruikmaken van de cache:
// Register the cache
var redis = builder.AddRedis("redis");
// Initiate the consuming project and pass the cache
builder.AddProject<Projects.ConsumingProject>()
.WithReference(redis);
De verbruikende projecten configureren
Als u het .NET Aspire Distributed Cache-onderdeel in een microservice wilt installeren, gebruikt u een opdracht zoals deze in uw .NET Aspire-projecten:
dotnet add package Aspire.StackExchange.Redis.DistributedCache --prerelease
U kunt er ook voor kiezen om NuGet Package Manager te gebruiken om het onderdeel te installeren:
Een gedistribueerde cache gebruiken
In elk project waarin u de cache wilt gebruiken, moet u een gedistribueerd cacheobject verkrijgen dat de verbinding met Redis vertegenwoordigt. In het Program.cs-bestand registreert deze code de gedistribueerde cache:
builder.AddRedisDistributedCache("cache")
Zodra de cache is geregistreerd in het verbruikende project, kunt u de gedistribueerde cache ophalen wanneer u deze nodig hebt met behulp van afhankelijkheidsinjectie:
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) }
);
}
}
}
Configuratie
Als u wilt dat de microservices verbinding maken met de gedistribueerde Redis-cache, moet u hen laten weten waar deze zich bevindt door een verbindingsreeks op te geven. De bovenstaande aanroep van de AddRedisDistributedCache()
methode heeft een verbindingsreeks opgegeven.redis
Gebruik een ConnectionStrings
sectie in uw configuratiebestand, bijvoorbeeld in appsettings.json, om de verbindingsreeks te configureren:
{
"ConnectionStrings": {
"redis": "redis.contoso.com:6379"
}
}
U kunt ook appsettings.json gebruiken om het gedrag van het gedistribueerde cacheonderdeel te configureren. Met deze code wordt bijvoorbeeld de verbinding geconfigureerd voor een time-out na vijf seconden en probeert u het drie keer opnieuw:
{
"Aspire": {
"StackExchange": {
"Redis": {
"ConfigurationOptions": {
"ConnectTimeout": 5000,
"ConnectRetry": 3
}
}
}
}
}
U kunt de verbinding ook configureren met inline gedelegeerden voor de AddRedisDistributedCache()
methode. Met deze code worden dezelfde eigenschappen geconfigureerd als in het vorige JSON-voorbeeld:
builder.AddRedisDistributedCache(
"redis",
configureOptions: options => options.ConnectTimeout = 5000
);