![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Irbis24 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 4.9.2006 Репутация: нет Всего: нет |
Как правильно закешировать hmtl страницы в java?
Мы используем сервлетный фильтр ehcache. <filter> <filter-name>CacheFilter</filter-name> <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class> </filter> При истечении срока кеширования, все пользователи ждут обновления элемента, потому что используется алгоритм BlockingCache. Есть ли возможность разработать кеширование таким образом, чтобы пока обновляется элемент в кеше, пользователи получали старое значения, а не ожидали обновления этого элемента? |
|||
|
||||
Zamuta |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 18.1.2006 Репутация: 4 Всего: 6 |
Irbis24, а что, пока элемент обновляется в кеше приходится ждать? Как долго он обновляется?
-------------------- Thank you opensource. |
|||
|
||||
Irbis24 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 4.9.2006 Репутация: нет Всего: нет |
Элемент в кеше обновляется 3 секунды. Для нашего сайта это недопустимо.
|
|||
|
||||
sarjsheff |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.7.2006 Где: Moscow Репутация: 1 Всего: 1 |
||||
|
||||
sarjsheff |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.7.2006 Где: Moscow Репутация: 1 Всего: 1 |
В фильтре можно обернуть response при помощи HttpServletResponseWrapper и дальше послать его на выполнение приложению на выходе взять сгенереный контент и закешировать его.
Пример обертки sheff/ResponseFilter.java :
sheff/FilterOutputStream.java
Фильтр sheff/CacheFilter.java :
Гдето при мерно так. ![]() |
||||||
|
|||||||
Barvetal |
|
|||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 181 Регистрация: 31.10.2005 Репутация: 5 Всего: 5 |
А почему это memcached самый быстрый??? Как по мне, ehcache и oscache на порядки быстрее чем memcached (внутрипроцессное взаимодействие против межпроцессного). Ведь memcached находится не в jvm-процессе, а за его пределами. Поэтому данные из memcached нужно брать через межпроцессное взаимодействие (включая сериализацию/десериализацию объектов с передачей их между процессами). А вот ehcache и oscache встраиваются в текущий jvm-процесс. И доступ к объектам в этом кеше будет очень быстрым, так как для получения объекта достаточно просто получить ссылку из hashmap по ключу. Или я ошибаюсь? Обьясните, почему memcached быстрее ehcache? |
|||
|
||||
Barvetal |
|
|||
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 181 Регистрация: 31.10.2005 Репутация: 5 Всего: 5 |
Насколько я понял, в Вашем примере каждый пользователь все равно каждый раз ждет, пока приложение просчитает данные для кеша, если ячейка кеша устарела. Мне же нужно, чтобы пользователь в случае устаревания ячейки кеша получал старые значения ячейки, так же как и остальные пользователи после него, до тех пор, пока новое значение не будет просчитано в бэкграунд потоке, запущенным первым пользователем, который попал на устаревшее значение ячейки. Можно ли добиться такого алгоритма? Если я запутал Вас своим алгоритмом, задам вопрос проще: можно ли организовать кеширование таким образом, чтобы пользователи не ждали обновления ячейки, а получали устаревшую версию, если таковая имеется, до тех пор, пока не появится новая версия ячейки? Спасибо! |
|||
|
||||
sarjsheff |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.7.2006 Где: Moscow Репутация: 1 Всего: 1 |
memcached стоит одельно в связи с этим не напрягает тот же сервер. Сохранение в кеше происходит быстрее в связи с нативной реализацией на C особенно заметно при сильно нагруженном клсторе из tomcatов. При большых объемах обновлений кэша работает быстрее доказано livejournal.com http://www.linuxjournal.com/article/7451 . Честно сказать я использую ehcache так как проще, можно сделать кластер и сохранять кешь на винт. Добавлено через 11 минут и 45 секунд
Это вы меня извените (время мало работы много ![]() |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |