Внутренняя система строительной компании — сквозной учёт заявок от объекта строительства через производственно-технический отдел до снабжения.
Система росла быстрее, чем закладывалось при старте: объектов и заявок становилось больше, а каждый экран по-прежнему шёл напрямую в базу данных. Справочники, списки пользователей и карточки заявок перечитывались заново при каждом открытии страницы — включая те данные, которые не менялись неделями. Тормозил не какой-то один тяжёлый отчёт, а вся система сразу, и с каждым новым объектом это только усугублялось бы.
Внедрил кэширующий слой на Redis — до этого его в системе не было вообще. Разобрал, какие данные меняются редко, а какие в реальном времени, и покрыл кэшем справочники, пользователей и заявки. Инвалидация смешанная: справочные данные живут по сроку и протухают сами, оперативные — сбрасываются из кода в момент изменения сущности, чтобы пользователь не видел устаревшую заявку сразу после правки. Слой сделал общим для всех сервисов, чтобы при дальнейшем разделении монолита кэш не пришлось поднимать в каждом заново.
Отклик сократился минимум наполовину: средний запрос шёл 150–300 мс, стал 100–150, а там, где ответ отдавался из кэша целиком, — 40 мс вместо 300. Прямые обращения к PostgreSQL убраны на всех 30+ эндпоинтах, нагрузка на базу перестала расти линейно вместе с числом пользователей и объектов. Redis остался в архитектуре и после декомпозиции монолита — как общий кэш для выделенных сервисов.