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

How do i cache pages that are created on the fly by java servlet so reusable and indexable

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

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

  1. 搜索艺术家可以 return 现有页面而不是 重新创建它。
  2. 我希望页面被 Google 抓取并编入索引,以便它们可以在 Google 搜索中 return 编辑。

我该怎么做(我有很多 Java 经验,但网站经验不多)

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

在页面上设置一些缓存 headers 以便页面存储更长的时间(例如几天),将 tomcat 移至其他主机名,然后设置亚马逊cloudfront 将 tomcat 作为源服务器。

然后最后设置 CNAME DNS 记录以指向 www.yourdomain.com 到云端

当您更新索引时,只需告诉 cloudfront 使其整个缓存失效即可。

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

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

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