2

我想在“html 级别”实现一个 jsp 缓存。我的想法是:

for each request{
  if(exists("/cache/<product_id>/<product_name>.html")){
    response "/cache/product/1234/cat.html"
  }else{
    response database.getCat("1234")
  }
}

exists(String path){
   if(!file(path)){
     return false;
   }else{
      if((currentDate = file(path).createdAt) > CACHE_TIME){
         return false
      }else{
          return true
      }
   }
}

因此,如您所见,如果页面自 CACHE_TIME 以来未显示,则仅转到数据库(或另一个繁重的进程)

例子:

用户 1 转到http://mysite.com/products/1234/cat.jsp 系统转到数据库并生成一个 html 文件 (products-1234-cat.html) 用户 1 看到页面 立即出现用户 2 并转到相同的 url 系统看到缓存存在,所以使用 products-1234-cat.html 响应(没有数据库,没有繁重的进程)。

我该如何实施?

我希望我清楚我想要什么

4

1 回答 1

0

如果您使用 Apache,则最好使用 mem_cache 模块或类似的 http://httpd.apache.org/docs/2.2/caching.html

但如果你真的有充分的理由使用应用程序级缓存,你应该以不同的方式来做。除非您添加一些额外的逻辑(我的意思是创建那些缓存的 html 文件时的竞速条件),否则您想要这样做的方式将不是线程安全的。

我将向 JSP 标记库 (customtag:cache) 添加一个新的自定义标记并将您的内容包装到此标记中。根据缓存 ttl 或其状态(暖、冷),我将呈现缓存标签内的实际内容或其缓存版本,这些版本可以存储在 HashMap 中。

于 2012-10-01T15:06:51.740 回答