我如何缓存由java servlet动态创建的页面,以便可重用和可索引

时间:2015-02-11 14:28:14

标签: java tomcat amazon-web-services web-crawler

我正在使用Amazon Web Services和Tomcat来部署Java应用程序。

该应用程序包含艺术家数据的Lucene索引和允许用户搜索音乐艺术家(例如麦当娜,披头士乐队)的网站,然后它将以html的形式返回从索引生成的该艺术家的信息页。索引不会改变,因此为特定艺术家生成的页面永远不会改变。我不想预先计算页面,因为这需要很长时间(超过一百万页)并且需要很多空间,但我确实想要缓存页面以便:

  1. 搜索艺术家可以返回现有页面而不是 重建它。
  2. 我希望Google抓取网页并将其编入索引,以便在Google搜索中返回。
  3. 我如何解决这个问题(我有丰富的Java经验,但网站经验不多)

    当我说索引永远不会改变时,我的意思是部署的应用程序使用相同的索引,并且永远不会修改该索引。大约每月一次创建一个新索引,并使用新索引重新部署应用程序。

2 个答案:

答案 0 :(得分:1)

在页面上设置一些缓存标题,以便将页面存储更长的时间(例如几天),将tomcat移动到其他主机名,然后设置amazon cloudfront以将tomcat作为源服务器。< / p>

然后最终设置一个CNAME DNS记录,将www.yourdomain.com指向云端

更新索引时,只需告诉cloudfront使其整个缓存无效。

这是我能想到的最懒惰的方式。 (但如果有更懒惰的方法,我愿意接受建议。)

答案 1 :(得分:0)

您可以使用Servlet中的以下代码为缓存创建目录,然后将新生成的页面存储在那里。

       cache = Paths.get(request.getSession().getServletContext().getAttribute("javax.servlet.context.tempdir") + "/artists");
        try {
            if(!Files.exists(cache)) {
                Files.createDirectory(cache);
            }
        } catch(IOException e) {