Package Description
$ dotnet add package Reo.Core.MemoryCacheReo.Core.MemoryCache — это библиотека для реализации кэширования данных в приложениях на C#, которая интегрируется с Redis для обеспечения высокой доступности и масштабируемости. Пакет решает проблему управления кэшем в распределённых системах, предоставляя возможность хранения данных в памяти и синхронизации через Redis. Основные функции включают:
ReoMemoryCache
Основной класс для работы с кэшем. Обеспечивает методы для получения, установки и удаления данных из кэша с поддержкой
Redis как резервного хранилища.
IDistributedCacheLock
Интерфейс для управления блокировками в распределённых системах, используя Redis для синхронизации доступа к ресурсам.
ReoMemoryCacheOptions
Класс для настройки параметров кэша (тайминги для справочных и несправочных данных).
ReoMemoryCacheOptionsValidator
Валидатор конфигурации, проверяющий корректность настроек кэша при регистрации в DI.
Microsoft.Extensions.DependencyInjectionMicrosoft.Extensions.ConfigurationMicrosoft.Extensions.Caching.Redis (через AddRedis в ServiceCollectionExtensions).Установите пакет через NuGet:
Install-Package Reo.Core.MemoryCache
или:
dotnet add package Reo.Core.MemoryCache
Конфигурация
Добавьте настройки в appsettings.json:
{
"ReoMemoryCacheOptions": {
"ReferenceData": {
"AbsoluteExpiration": "00:10:00",
"SlidingExpiration": "00:05:00"
},
"NonReferenceData": {
"AbsoluteExpiration": "00:30:00"
}
}
}
Регистрация в DI
В Program.cs или Startup.cs:
services.RegisterReoMemoryCache(Configuration);public class ReferenceDataService
{
private readonly IReoMemoryCache _cache;
public ReferenceDataService(IReoMemoryCache cache)
{
_cache = cache;
}
public async Task<List<string>> GetReferenceDataAsync()
{
var key = "reference_data_key";
return await _cache.GetOrSetAsync(key, async () =>
{
// Получение данных из источника
return await FetchDataFromDatabaseAsync();
}, ReoMemoryCacheOptions.ReferenceData);
}
}public class DistributedLockService
{
private readonly IDistributedCacheLock _lock;
public DistributedLockService(IDistributedCacheLock lockProvider)
{
_lock = lockProvider;
}
public async Task PerformLockedOperationAsync()
{
var lockKey = "distributed_lock_key";
using (await _lock.LockAsync(lockKey, TimeSpan.FromSeconds(30)))
{
// Критическая секция, защищённая блокировкой
await ProcessDataAsync();
}
}
}Reo.Core.MemoryCache распространяется под лицензией MIT License. Полный текст лицензии можно найти здесь.