Контекст
С ростом объема данных (задачи, доски, логи активности) и увеличением сложности запросов (агрегация Story Points, проверка прав через CASL), нагрузка на основную базу данных PostgreSQL возрастает. Внедрение распределенного кэширования необходимо для снижения задержек (latency) при чтении часто запрашиваемых данных, таких как профили пользователей, настройки досок и текущие сессии SSE.
Технические требования
- Локация логики:
src/shared/cache, src/modules/tasks/interceptors, infrastructure/redis
- Инструменты: Redis,
ioredis или node-cache-manager.
- Логика работы:
- Реализовать
CacheService — обертку над Redis для операций get, set, del и flush.
- Внедрить паттерн Cache Aside:
- При запросе данных проверяется кэш.
- При промахе (cache miss) данные берутся из БД и записываются в кэш.
- Реализовать автоматическую инвалидацию: при любом
UPDATE или DELETE запросе связанный ключ в Redis должен удаляться.
- Настроить глобальный префикс для ключей (например,
tracker_cache:) и стандартный TTL (Time To Live).
Цель и критерии приемки (Definition of Done)
Важные указания
- Производительность: Использовать сериализацию в JSON для хранения объектов. Для списков задач рассмотреть использование
Redis Hashes или Sets при необходимости сложной выборки.
- Ошибки: Реализовать стратегию Fail-soft — если Redis недоступен, приложение должно продолжать работу, обращаясь напрямую к PostgreSQL, не выдавая ошибку пользователю.
- Безопасность: Кэшированные данные не должны содержать конфиденциальную информацию в открытом виде, если доступ к Redis не ограничен. Учитывать права доступа: кэш должен быть разделен по
user_id или role, чтобы избежать ситуации, когда пользователь видит данные чужой доски из кэша.
Контекст
С ростом объема данных (задачи, доски, логи активности) и увеличением сложности запросов (агрегация Story Points, проверка прав через CASL), нагрузка на основную базу данных PostgreSQL возрастает. Внедрение распределенного кэширования необходимо для снижения задержек (latency) при чтении часто запрашиваемых данных, таких как профили пользователей, настройки досок и текущие сессии SSE.
Технические требования
src/shared/cache,src/modules/tasks/interceptors,infrastructure/redisioredisилиnode-cache-manager.CacheService— обертку над Redis для операцийget,set,delиflush.UPDATEилиDELETEзапросе связанный ключ в Redis должен удаляться.tracker_cache:) и стандартный TTL (Time To Live).Цель и критерии приемки (Definition of Done)
GET /boardsиGET /users/me.Важные указания
Redis HashesилиSetsпри необходимости сложной выборки.user_idилиrole, чтобы избежать ситуации, когда пользователь видит данные чужой доски из кэша.