2009年12月17日木曜日

GAE/JのMemcacheでフィードをキャッシュ

スズキです。

下記記事で、GAE/J上でのフィードの取得&表示までできました。
http://blog.suz-lab.com/2009/12/geajrome.html

しかし、リクエストの都度フィードを取得するのはよろしくないので、
Memcacheにキャッシュするようにしてみました。

--------【Java】--------
MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
SyndFeed feed = (SyndFeed)memcacheService.get("feed");
if(feed == null) {
  URLFetchService fetchService = URLFetchServiceFactory.getURLFetchService();
  HTTPRequest httpRequest = new HTTPRequest(
    new URL("http://feeds.feedburner.com/suz-lab-blog"),
    HTTPMethod.GET,
    disallowTruncate().followRedirects()
  );
  HTTPResponse httpResponse = fetchService.fetch(httpRequest);
  SyndFeedInput feedInput = new SyndFeedInput();
  feed = feedInput.build(
    new InputStreamReader(
      new ByteArrayInputStream(httpResponse.getContent()),
      "UTF-8"
    )
  );
  memcacheService.put("feed", feed, Expiration.byDeltaSeconds(3600));
}
request.setAttribute("feed", feed);
--------

Memcacheにフィードがなかったら、該当URLにフィードを取得しにいきます。
MemcacheのExpireは1日(3600秒)にしています。

最終的にはフィードはcronで定期的に、取得&Datastoreに保存して、
Memcacheにフィードが無かったらDatastoreからフィードを取得する形にしたいなー。

--------
http://www.suz-lab.com

0 コメント: