Мне трудно понять, когда hibernate попадает в кеш второго уровня и когда он делает недействительным кеш.
Это то, что я сейчас понимаю:
- Кэш второго уровня хранит объекты между сеансами, область действия - SessionFactory
- Вы должны указать, какие объекты будут кэшироваться, ни один объект не будет кэшироваться по умолчанию.
- Кэш запросов хранит результаты запросов в кеше.
То, что я не понимаю,
- Когда hibernate попадает в этот кеш?
- Скажем, я настроил кеш второго уровня, но не кеширование запросов. Я хочу кэшировать своих клиентов, из них 50000. Каким образом я могу получить клиентов из кеша?
- Я предполагаю, что могу получить их по id из кеша. Это было бы легко, но также не достойно кэширования. Но что, если я хочу сделать некоторые расчеты со всеми моими клиентами. Скажем, я хочу показать список клиентов, как я могу получить к ним доступ?
- Как я могу получить всех своих клиентов, если кеширование запросов отключено?
- Что произойдет, если кто-нибудь обновит одного из клиентов?
- Будет ли этот клиент недействителен в кеше или все клиенты будут признаны недействительными?
Или я думаю, что кэширование совершенно неверно? Что будет более подходящим использованием кеша второго уровня в этом случае? Документация спящего режима не совсем понятна, как работает кеш в действительности. Существуют только инструкции по настройке.
Update: Поэтому я понял, что кеш второго уровня (без кеша запросов) будет полезен для загрузки данных по идентификаторам. Например, у меня есть объект пользователя, который я хочу проверить для разрешений в каждом запросе в веб-приложении. Будет ли это хорошим вариантом для сокращения доступа к базе данных путем кэширования пользователя во втором кеше второго уровня? Как я бы сохранил идентификатор пользователя в сеансе или где бы то ни было, и когда мне нужно проверить разрешения, я бы загрузил пользователя по его идентификатору и проверял разрешения.