| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Как правильно закешировать hmtl страницы в java? |
| Автор: Irbis24 3.1.2008, 19:27 |
| Как правильно закешировать hmtl страницы в java? Мы используем сервлетный фильтр ehcache. <filter> <filter-name>CacheFilter</filter-name> <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class> </filter> При истечении срока кеширования, все пользователи ждут обновления элемента, потому что используется алгоритм BlockingCache. Есть ли возможность разработать кеширование таким образом, чтобы пока обновляется элемент в кеше, пользователи получали старое значения, а не ожидали обновления этого элемента? |
| Автор: Zamuta 4.1.2008, 01:06 |
| Irbis24, а что, пока элемент обновляется в кеше приходится ждать? Как долго он обновляется? |
| Автор: Irbis24 4.1.2008, 14:43 |
| Элемент в кеше обновляется 3 секунды. Для нашего сайта это недопустимо. |
| Автор: sarjsheff 8.1.2008, 14:36 |
| Попробуй http://www.danga.com/memcached/ быстрее врядли чего найдешь. |
| Автор: sarjsheff 9.1.2008, 13:50 | ||||||
| В фильтре можно обернуть response при помощи HttpServletResponseWrapper и дальше послать его на выполнение приложению на выходе взять сгенереный контент и закешировать его. Пример обертки sheff/ResponseFilter.java :
sheff/FilterOutputStream.java
Фильтр sheff/CacheFilter.java :
Гдето при мерно так. |
| Автор: Barvetal 10.1.2008, 16:32 | ||
А почему это memcached самый быстрый??? Как по мне, ehcache и oscache на порядки быстрее чем memcached (внутрипроцессное взаимодействие против межпроцессного). Ведь memcached находится не в jvm-процессе, а за его пределами. Поэтому данные из memcached нужно брать через межпроцессное взаимодействие (включая сериализацию/десериализацию объектов с передачей их между процессами). А вот ehcache и oscache встраиваются в текущий jvm-процесс. И доступ к объектам в этом кеше будет очень быстрым, так как для получения объекта достаточно просто получить ссылку из hashmap по ключу. Или я ошибаюсь? Обьясните, почему memcached быстрее ehcache? |
| Автор: Barvetal 10.1.2008, 18:15 | ||
Насколько я понял, в Вашем примере каждый пользователь все равно каждый раз ждет, пока приложение просчитает данные для кеша, если ячейка кеша устарела. Мне же нужно, чтобы пользователь в случае устаревания ячейки кеша получал старые значения ячейки, так же как и остальные пользователи после него, до тех пор, пока новое значение не будет просчитано в бэкграунд потоке, запущенным первым пользователем, который попал на устаревшее значение ячейки. Можно ли добиться такого алгоритма? Если я запутал Вас своим алгоритмом, задам вопрос проще: можно ли организовать кеширование таким образом, чтобы пользователи не ждали обновления ячейки, а получали устаревшую версию, если таковая имеется, до тех пор, пока не появится новая версия ячейки? Спасибо! |
| Автор: sarjsheff 10.1.2008, 18:53 | ||||||||
memcached стоит одельно в связи с этим не напрягает тот же сервер. Сохранение в кеше происходит быстрее в связи с нативной реализацией на C особенно заметно при сильно нагруженном клсторе из tomcatов. При большых объемах обновлений кэша работает быстрее доказано livejournal.com http://www.linuxjournal.com/article/7451 . Честно сказать я использую ehcache так как проще, можно сделать кластер и сохранять кешь на винт. Добавлено через 11 минут и 45 секунд
Это вы меня извените (время мало работы много |