在“html级别”实现jsp缓存

时间:2012-08-21 16:19:12

标签: java jsp caching

我想在“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并转到相同的网址 系统看到存在缓存,因此使用products-1234-cat.html进行响应(没有数据库,没有繁重的进程)。

我该如何实现?

我希望我能清楚自己想要什么

1 个答案:

答案 0 :(得分:0)

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

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

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