OSCache简介
OSCache是OpenSymphony这个开源项目众多Projects中的一个。他是一个高效的J2EE缓存框架,能够很好的解决动态网站速度的问题。下面来
看下OSCache解决了动态网站的哪些令人郁闷的问题。
1.缓存动态内容:其实我们的动态网页上一般只有一部分是动态的(表头,表尾一般是不变的),如果我们缓存整个网页显然不成,因为有部分是
随着请求有可能变的。OSCache提供的方式是允许我们只缓存一部分网页。
2.缓存2进制内容:产生的图片和PDF文件在服务器加载的时候非常的耗时。OSCache解决这个问题是通过一个Servlet2.3的缓存过滤功能,然后能
够缓存任意的URI(比如一个完整的页面或者是一个产生的图片/PDF文件)
3.容错:有这种情况或许我们会遇到,就是当一个动态的网页出现错误。即便我们的页面有95%都加载完毕,但就是由于这个错误,整个页面就会
返回错误的提示或页面。OSCache允许我们提供出现错误时的缓存内容,如果出现就适时的提示出来了。
除了上面的这些Servlet的特征外,OSCache完全可以充当任何一个java程序的缓存方案。OSCache 的一般特征如下:
1.缓存任意对象:可以不受限制的缓存JSP的一部分或是Http请求,任何的Java对象都可以被缓存。
2.全面的API:通过API可以完完全全的控制OSCache的任何特性。
3.持久缓存:我们可以把认为重要的数据缓存到硬盘上。
4.支持集群:集群缓存数据能被单个的进行参数配置,不需要修改代码。
5.缓存记录的过期:你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。
实例1:
我们现在的程序是这样的:
程序的静态内容和表单都是html
动态的内容都是一个servlet和一个jsp文件,servlet准备数据放到request里然后forward到jsp
jsp唯一功能就是显示request里面的数据。
现在的问题是有些页面访问数据库量大或者频繁想做一个cache.
我没用过oscache,在网上看了一下基本介绍的都是在jsp文件中加入如下形式的代码
- <cache:cache key= "products" scope= "session" >
- some jsp content
- </cache:cache>
<cache:cache key="products" scope="session"> some jsp content </cache:cache>
可是我的动态内容都是在servlet里面访问的数据库,对于动态内容用户只能访问servlet不能直接访问jsp
这样的话用户访问servlet还是要查数据库阿,
想我这种情况该怎么做呢??
解决方案:
1.已经找到解决办法 CacheFilter 正好满足我的要求
我就是想把产品列表缓存 弄个filter把那个servlet缓存到application就OK了
正好满足我的要求,我把缓存时间设置成了1小时
后台加入一个产品前台虽然不能立即看到 不过不碍事,增加产品的可能性很小,也不要求时时看到
基本开始的时候就都录入完毕了
2.如果要在首页缓存一个产品列表区块,可以这样子:)
- <cache:cache key= "products" scope= "session" >
- <jsp:include page= "product_list.do" />
- </cache:cache>
参考资料:
http://blog.csdn.net/foxcai/articles/1232293.aspx
http://zhangxinjie.blog.ccidnet.com/blog-htm-itemid-724397-uid-20630-do-showone-type-blog.html