![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Barvetal |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 181 Регистрация: 31.10.2005 Репутация: 5 Всего: 5 |
Всем привет!
Пытался использовать ehCache и osCache в hibernate, но проблема одна и та же. При устаревании ячейки hibernate-кеша происходит много обращений к базе до тех пор, пока для первого потока запрос (CriteriaQuery) не выполнится и результат не будет положен в кеш. Хотелось бы, чтобы после устаревания ячейки кеша, пока первый пользователь выполняет запрос для этой ячейки, остальные пользователи ожидали момента обновления этой ячейки, или получали старое значение ячейки (а не выполняли точно такие же запросы). Тогда бы сайт не тормозил бы на несколько десятков секунд каждые 5 минут. Можно ли так настроить кеш в hibernate? Всем заранее спасибо! P.S.: Пример. Я использую хибернейт на сайте с большим количеством одновременных пользователей (несколько десятков) и тяжелыми запросами (до секунды). Expiration время кеша установлено на 5 минут. Поэтому раз в 5 минут кеш устаревает, а так как пользователи открывают страницы сайта одновременно, для каждого из них происходит пересчет страницы. И, соответственно, выполняются одни и те же запросы к базе до тех пор, пока для первого пользователя запрос не будет выполнен и не положен в кеш. Поэтому все пользователи очень долго ожидают загрузки страниц каждые пять минут. P.P.S.: Что я делал в ehcache: Пытался использовать BlockingCache и SelfPopulatingCache, но, судя по всему эти виды кешей можно использовать только для кеширования своих объектов, а в hibernate эти виды кешей не поддерживаются. Что я делал в oscache: В oscache.properties указывал cache.blocking=false и cache.blocking=true, но в обеих случаях паралелльные потоки выполняли запросы к базе параллельно. |
|||
|
||||
| w1nd |
|
|||
![]() Вертилятор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 22.3.2006 Где: Москва Репутация: 7 Всего: 54 |
А что у вас в "cache@usage"?
-------------------- ![]() ![]() |
|||
|
||||
| Barvetal |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 181 Регистрация: 31.10.2005 Репутация: 5 Всего: 5 |
А какая разница? Возможны ж следующие варианты: usage="transactional|read-write|nonstrict-read-write|read-only" Для каждого из них по истечению времени кеша ячейка становится невалидной, и для ее заполнения вполне могут стартовать много параллельных потоков... |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |