Собственная реализация распределённого кеша на ASP.NET Core с трёхуровневым хранением, фоновыми сервисами и REST API.
- Ключ-значение с произвольными типами (строки, числа, объекты, массивы)
- Настраиваемый TTL для каждого ключа
- Три уровня хранения: RAM → Fallback → База данных
- Автоматическая очистка просроченных ключей фоновыми сервисами
- Снапшоты в JSON для восстановления после перезапуска
- REST API со Swagger-документацией
- Опциональное персистентное хранение в SQL Server
- Потокобезопасность на основе ConcurrentDictionary
- NuGet-клиент для подключения из других проектов
- .NET 8.0 SDK
- SQL Server (опционально, можно отключить в настройках)
git clone https://github.com/OwnRedis-Team/OwnRedis.Backend.git
cd OwnRedis.BackendОтредактируйте OwnRedis.Server/appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=OwnRedisDb;User ID=sa;Password=YourPassword;TrustServerCertificate=True;"
},
"CacheTtlSettings": {
"RamToFallback": "00:00:15",
"FallbackToDb": "00:10:00",
"CleanupDelay": "00:00:05"
},
"CacheOptions": {
"UseDatabaseLayer": false
},
"SnapshotSettings": {
"IntervalSeconds": 60,
"FilePath": "cache_snapshot.json"
}
}Для работы без базы данных оставьте UseDatabaseLayer: false — кеш будет работать только в памяти.
dotnet tool install --global dotnet-ef
cd OwnRedis.Server
dotnet ef database updatedotnet run --project OwnRedis.ServerСервер запустится на http://localhost:5000 (или порт, указанный в launchSettings.json).
Swagger доступен по адресу: http://localhost:5000/swagger
OwnRedis.Backend/
├── OwnRedis.Core/ # Общие модели и интерфейсы
├── OwnRedis.Server/ # ASP.NET Core сервер
└── OwnRedis.Client/ # NuGet-пакет клиента
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/cache/{key} |
Получить значение |
| POST | /api/cache |
Сохранить значение |
| DELETE | /api/cache/{key} |
Удалить значение |
| GET | /api/cache/exists/{key} |
Проверить существование |
| GET | /api/cache/ram/all |
Все ключи в RAM |
| GET | /api/admin/stats |
Статистика и логи |
| Параметр | Описание | По умолчанию |
|---|---|---|
CacheTtlSettings.RamToFallback |
Доп. время в Fallback после RAM | 15 сек |
CacheTtlSettings.FallbackToDb |
Запас TTL для БД | 10 мин |
CacheTtlSettings.CleanupDelay |
Интервал фоновой очистки | 5 сек |
CacheOptions.UseDatabaseLayer |
Включить БД | false |
SnapshotSettings.IntervalSeconds |
Интервал снапшотов | 300 |
SnapshotSettings.FilePath |
Путь к файлу снапшота | cache_snapshot.json |
Для подключения кеша к своему проекту используйте NuGet-пакет OwnRedis.Client.
MIT License