我想在“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进行响应(没有数据库,没有繁重的进程)。
我该如何实现?
我希望我能清楚自己想要什么
答案 0 :(得分:0)
如果你使用Apache,你最好使用mem_cache模块或类似的 http://httpd.apache.org/docs/2.2/caching.html
但是如果你真的有充分的理由使用应用程序级缓存,那么你应该采用不同的方式。除非你添加一些额外的逻辑(我的意思是创建那些缓存的html文件时的竞争条件),你想要这样做的方式将不是线程安全的。
我会在JSP标记库(customtag:cache)中添加一个新的自定义标记,并将您的内容包装到此标记中。根据缓存ttl或其状态(暖,冷),我将呈现缓存标记内的实际内容或其缓存版本,可以存储在HashMap中。