У мене проблеми з розумінням, коли сплячий режим потрапляє в кеш другого рівня, і коли це робить кеш недійсним.
Це те, що я зараз розумію:
- Кеш-пам’ять другого рівня зберігає сутності між сесіями, область дії - SessionFactory
- Ви повинні сказати, які сутності кешувати, жодна сутність не буде кешована за замовчуванням
- Кеш запитів зберігає результати запитів у кеші.
Чого я не розумію, так це
- Коли сплячий режим потрапляє в цей кеш?
- Скажімо, я встановив кеш другого рівня, але не кешування запитів. Я хочу кешувати своїх клієнтів, їх там 50000. Якими способами я можу отримати клієнтів із кешу?
- Я припускаю, що я можу отримати їх за допомогою ідентифікатора з кешу. Це було б легко, але також не гідно кешувати. Але що, якщо я хочу зробити якийсь розрахунок з усіма своїми клієнтами. Скажімо, я хочу показати список клієнтів, як я тоді можу отримати до них доступ?
- Як я можу отримати всіх своїх клієнтів, якщо кешування запитів вимкнено?
- Що було б, якби хтось оновив когось із клієнтів?
- Чи був би цей клієнт недійсним у кеш-пам’яті чи всі клієнти втратили б силу?
Або я думаю, що кешування абсолютно помилкове? Що було б більш доцільним використанням кешу другого рівня в такому випадку? Документація сплячого режиму зовсім не зрозуміла, як кеш працює насправді. Є лише вказівки щодо того, як його налаштувати.
Оновлення: Отже, я зрозумів, що кеш другого рівня (без кешу запитів) був би корисним для завантаження даних за ідентифікаторами. Наприклад, у мене є користувацький об'єкт, який я хочу перевірити на наявність дозволів у кожному запиті у веб-програмі. Чи був би це гарний випадок для зменшення доступу до бази даних, кешуючи користувача в кеші другого рівня? Як би я зберігав ідентифікатор користувача в сеансі або де завгодно, і коли мені потрібно перевірити наявність дозволів, я завантажував би користувача за його ідентифікатором та перевіряв дозволи.