Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пишу сервлет, генерящий rss. Как закешировать rss? 
:(
    Опции темы
Barvetal
Дата 22.9.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 181
Регистрация: 31.10.2005

Репутация: 5
Всего: 5



Всем привет!

Разрабатываю новостийный сайт для своей компании. Нам необходимо создавать rss-ки наших новостей на экспорт. Нагрузка на rss-ки будет значительной, поэтому производительность критична.

Поэтому хочу написать сервлет, который с периодичностью раз в 10 минут генерирует rss-ки, и кеширует сгенерированный контент в оперативной памяти. Когда клиенты обращаются к этому сервлету, он отдает им rss-ки из кеша в памяти.

Вопрос мой следующий:
Как правильно закешировать сгенерированные rss-ки? Может, есть уже готовые библиотеки для кеширования rss-ок? Или просто есть хорошие библиотеки для кеширования?

Всем заранее спасибо!
PM MAIL   Вверх
y3u
Дата 22.9.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



а не проще писать XML-ник в вебконекст и отдавать его напрямую, а не заморачиваться сервлетом и кешированием? А обновление сделать через какой-нибудь шедулер, скажем через Quartz


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
sergejzr
Дата 22.9.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 2
Всего: 360



Кэшировать можешь простым Hashtable. Будешь складывать и доставать. У тебя ведь многопоточная запис/чтение не критично, так что никаких мегабиблкиотек подгружать не надо smile
Код

Hashtable->put(rss_id,rss_content);
rss_content=Hashtable->get(rss_id);


Сможешь отправлять правильные заголовки раз всё равно генеришь раз в 10 минут. 

Смотри http-header: "Cache-Control: public, max-age=" . current_time() * 60*60*10); //Теперь клиент раньше чем через 10 минут файл на сервере не спросит.

Дополнительно советую тебе в rss_content сохранять md5-хэш и дату создания самого файла. 


Посмотри также http-header 'Last-Modified: ' (заголобок сервера) и If-Modified-Since (заголовок клиента) Тогда не надо будет отправлять весь RSS на клиент, достаточно будет отправитьзаголовок: "HTTP/1.0 304 Not Modified", если запрос с ответом совпали.

Ещё лучше работать с md5 и посылать/принимать по заголовкам:
ETag (сервер) и If-Match (клиент). Тогда ты точно узнаешь, был ли модифизирован файл с момента последней скачки клиентом smile



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Tony
Дата 22.9.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: 6
Всего: 12



import sun.misc.Cache

Cache c=new Cache();
        c.put("rss1", MyObject);

или 
хранить в servletContext(application scope)


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
Barvetal
Дата 22.9.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 181
Регистрация: 31.10.2005

Репутация: 5
Всего: 5



Спасибо!
И еще один вопрос. А как лучше всего генерировать сам контент rss? Есть ли какая-то нормальная библиотека для генерации rss? Или все делать руками примерно вот так:
Код

Writer.println("<rss version=\"2.0\"">);
Writer.println("    <channel>");
?

Спасибо!
PM MAIL   Вверх
sergejzr
Дата 22.9.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 2
Всего: 360



Ну "формат" RSS довольно простой ведь. 
Утилиты посмотри здесь: https://rome.dev.java.net/


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
y3u
Дата 22.9.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



чтобы написать валидный XML-ник без проблем можно заюзать доволно удобную библяотечку от джакарты ECS


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.