Ваш кэш в Redis неэффективен, что с этим делать?
Однажды в проде контейнеры одного из сервисов начали падать по OutOfMemory . Контейнерам было выделено по 4 ГБ оперативной памяти , нагрузка была вполне обычной: десятки страниц в секунду. Расследование показало, что проблема была в JSON-конфиге. Схема была стандартная. В базе данных хранился JSON. При запросе приложение доставало его из базы, выполняло дополнительную обработку — заполнение вычисляемых полей, обогащение справочниками — и сохраняло результат в Redis . Подавляющее большинство пользователей запрашивало один и тот же JSON и ходило за ним в Redis . Из-за ошибки в обработке закэшированный JSON распухал до десятков мегабайт . В кэш писались не только нужные поля, но и вложенные коллекции, история изменений, сериализованные справочники. Казалось бы, если мы запрашиваем один и тот же JSON, размер не должен так критично влиять. Но всё оказалось интереснее… Читать далее