34 lines
1.5 KiB
Markdown
34 lines
1.5 KiB
Markdown
# ADR-002: In-Memory Cache with Migration Path to Redis
|
||
|
||
**Status:** Accepted
|
||
**Date:** 2026-06-13
|
||
**Deciders:** Architect, Tech Lead
|
||
|
||
## Context
|
||
Для MVP требуется кеширование MOEX-данных, чтобы снизить нагрузку на внешнее API и обеспечить приемлемое время ответа. На начальном этапе нет требований к горизонтальному масштабированию, и хочется избежать внешних зависимостей.
|
||
|
||
## Decision
|
||
Использовать `@nestjs/cache-manager` с MemoryStore. TTL настраивается per-endpoint через конфигурацию.
|
||
|
||
Архитектура позволяет переключиться на Redis заменой импорта провайдера:
|
||
|
||
```typescript
|
||
// Текущая реализация
|
||
CacheModule.register({ store: 'memory', ttl: 900 })
|
||
|
||
// Миграция на Redis (меняется только registration)
|
||
CacheModule.registerAsync({
|
||
useFactory: () => ({
|
||
store: redisStore,
|
||
host: process.env.REDIS_HOST,
|
||
port: process.env.REDIS_PORT,
|
||
}),
|
||
})
|
||
```
|
||
|
||
## Consequences
|
||
- Нет внешних зависимостей для MVP
|
||
- Кеш сбрасывается при рестарте сервера (приемлемо для read-only приложения)
|
||
- Чистый путь миграции на Redis
|
||
- Единый API для cache (cache-manager abstraction)
|