Package Description
$ dotnet add package Reo.Core.DistributedCacheReo.Core.DistributedCache — это библиотека для реализации распределённого кэширования в .NET-приложениях с
использованием Redis. Пакет предоставляет инструменты для настройки подключения к Redis, управления кэшем, реализации
блокировок (RedLock) и обработки событий обновления кэша. Он решает задачи обеспечения согласованности данных в
распределённых системах, уменьшения нагрузки на базы данных и повышения производительности приложений.
RedisOptions: Класс для настройки параметров подключения к Redis (адреса, пароль, база данных и т.д.).IRedLockFactory: Интерфейс для создания объектов блокировок RedLock, обеспечивающих согласованность операций в
распределённых системах.CacheUpdateEvent: Модель события, используемая для уведомления о изменении данных в кэше.BaseRedisCache: Базовый класс реализации кэша на Redis, предоставляющий методы для работы с ключами и
значениями.RedisConventionalNamingOptions: Настройки для формирования имен кэш-ключей по соглашениям (например, добавление
префиксов).Используйте следующие команды для установки пакета:
Install-Package Reo.Core.DistributedCache
или
dotnet add package Reo.Core.DistributedCache
Добавьте сервисы в ConfigureServices в Startup.cs или Program.cs:
services.AddRedisCache(options =>
{
options.Password = "your-redis-password";
options.Uris = new[] { "redis://localhost:6379" };
options.DefaultDatabase = 0;
});
Настройки Redis можно указать в appsettings.json:
"RedisOptions": {
"Password": "your-redis-password",
"Uris": ["redis://localhost:6379"],
"DefaultDatabase": 0,
"NamingConvention": {
"GisName": "gis",
"ProjectName": "myproject"
}
}
public class MyService
{
private readonly IRedisCache _cache;
public MyService(IRedisCache cache)
{
_cache = cache;
}
public async Task SaveDataAsync(string key, object data)
{
await _cache.SetAsync(key, data, SerializationType.Json);
}
public async Task<object> GetDataAsync(string key)
{
return await _cache.GetAsync<object>(key);
}
}public async Task LockExampleAsync()
{
var lockFactory = serviceProvider.GetRequiredService<IRedLockFactory>();
var lockObj = await lockFactory.CreateLockAsync(TimeSpan.FromSeconds(10), CancellationToken.None);
if (lockObj.IsAcquired)
{
try
{
// Выполняем операции, требующие блокировки
}
finally
{
await lockObj.ReleaseAsync();
}
}
}public class CacheEventHandler : IHandle<CacheUpdateEvent>
{
public async Task Handle(CacheUpdateEvent @event, IMessageContext context)
{
await Console.Out.WriteLineAsync($"Кэш обновлён: {@event.Data}");
}
}Данный пакет распространяется под лицензией MIT.