С @Cacheable(sync = true) база всё равно получает шесть одинаковых тяжёлых запросов
Тяжёлый отчёт кэшируется на 5 минут в Redis. Чтобы при истечении записи не было лавины одинаковых пересчётов, добавили @Cacheable(value = "report", sync = true). Сервис работает в шести репликах. При истечении записи в базе видно ровно шесть одновременных тяжёлых запросов.
Почему sync не помог полностью?
- sync блокирует пересчёт только внутри одной JVM, а реплик шесть
- sync работает только для локальных кэшей и игнорируется для Redis
- sync = true не действует без @Transactional на методе
- Шесть запросов — это повторы, которые делает Redis при таймауте
