Hibernate二级缓存及产品Oscache

本文转载自:http://dchengquan53390.iteye.com/blog/1235422

二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享。二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。一般二级缓存我们都是通过第三方产品来实现,其中有很多缓存产品,下面的就以Oscache来介绍一下二级缓存的使用。 

Oscache缓存有几种,其中有: 
对页面部分的缓存。 
对整个页面的缓存。 
对对象的缓存。 

一、对部分页面的缓存。 
1. 下载、解压缩OSCache 
   请到OSCache的主页http://www.opensymphony.com/oscache/download.html下载Oscache的最新版本,作者下载的是OSCache的最新稳定版本2.0。将下载后的Zip文件解压缩到c:oscache(后面的章节中将使用%OSCache_Home%来表示这个目录)目录下 
2. 新建立一个web应用 
3. 将主要组件%OSCache_Home%oscache.jar放入WEB-INF/lib目录 
4. commons-logging.jar、commons-collections.jar的处理 
OSCache组件用Jakarta Commons Logging来处理日志信息,所以需要commons-logging.jar的支持,请将%OSCache_Home%libcorecommons-logging.jar放入classpath(通常意味着将这个文件放入WEB-INFlib目录)
如果使用JDK1.3,请将%OSCache_Home%libcorecommons-collections.jar放入classpath,如果使用JDK1.4或以上版本,则不必了 
5. 将oscache.properties、oscache.tld放入WEB-INF/class目录 
%OSCache_Home%oscache.properties包含了对OSCache运行特征值的设置信息 
%OSCache_Home%oscache.tld包含了OSCache提供的标签库的定义内容 
6. 修改web.xml文件 
在web.xml文件中增加下面的内容,增加对OSCache提供的taglib的支持: 

XML/HTML代码 

Java代码   收藏代码
  1. <taglib>      
  2.         <taglib-uri>oscachetaglib-uri>       
  3.         <taglib-location>/WEB-INF/classes/oscache.tldtaglib-location>       
  4. taglib>     


只需要通过上面简单的配置,我们就可以使用oscache对部分页面的缓存了,我们新建一个jsp页面,先在头部声明如下: 

XML/HTML代码 
Java代码   收藏代码
  1. <%@ taglib uri="oscache" prefix="os"%>    
  2. <%@ page import="com.eway.action.user.ArticleAction"%>    
  3. <%@ page import="com.eway.entity.Article"%>    
  4. <%@ page import="java.util.List;"%>    

其中的第一行是表示使用oscache的标签,底下的是我为了下面程序的需要导入的包。 
然后在jsp页面当中加入oscache的标签,如下所示 

XML/HTML代码 
Java代码   收藏代码
  1. <os:cache key="1" time="1800" scope="session">      
  2. <%     
  3.     ArticleAction action = new ArticleAction();     
  4.     List<Article> list = action.testOscache();     
  5.     for(int i = 0; i < list.size(); i++){     
  6.         Article article = list.get(i);     
  7.         out.println(article.getTitle());     
  8.     }     
  9. %>    
  10. os:cache>     


其中oscache的标签的一些属性含义如下: 

key:缓存的Key,可以是任何的字符,用来寻找缓存的内容用的.可以理解成HashMap中的Key.不能把2个要缓存的东东定义成一个名字,那样后一个会覆盖前一个的内容.默认情况,如果不指定Key的话,OSCache也会自动生成一个Key,规则是请求的URI+当前页面的Query String.

scope:缓存的范围.有2个, application和session.默认值是application.

time:缓存内容的时间.以秒为单位,默认是3600秒.到了指定的时间,就会刷新缓存内容.如果指定一个负数的话,意味着永远不会过期.

duration:也是用来指定缓存内容的时间,它和time属性只能是2选1,它的特点是可以用Simple Data Format 或者是ISO-8601进行日期格式化.

cron:用万年历的形式指定缓存内容何时过期的.它应用的Unix的万年历形式,如("0 * * * *")

refresh:是个Boolean值,如果是True的话,则不管前面提到的过期检查,都刷新.默认情况是false.

mode:设置这项为”silent”将防止把括起来的内容输出.这在你预加载缓存内容而不愿显示给用户看到时很有用.

groups:可以提供一个以逗号分割的组名称.如group="A, B".这将允许你以组的名义来操作他们,分组非常有用,比如你要缓存的内容正好需要另外一个应用程序的一部分或数据,当依赖的发生了改变,正好联动的可以使很多的组过期,进而使与组发生关联的缓存内容得到更新.

language:设置编码方式.

refreshpolicyclass:指定自定义的类来处理缓存的内容什么时候过期.这个类需要从 refreshpolicyparam com.opensymphony.oscache.web.WebEntryRefreshPolicy继承.

refreshpolicyparam:它和上面的是联合使用的.是给refreshpolicyclass传任意的参数的.指定这项的话,就必须有refreshpolicyclass,否则就不起作用. 

其中,我不得不把cron表达式多说几句.首先这五颗星的位置代表分,小时,一个月中的天,月,一周中的天分: 无疑问0~59.小时 : 无疑问 0~23.天(月) : 1~31月 : 1~12,用英文全称也可以.如January, April天(周): 0~6(0代表Sunday; 1代表Monday… 6代表Saturday)举个例子,比如我们想让缓存的内容在4月的晚上11:45分过期.我们可以这样来写"45 23 * April *".7、测试是否配置成功 

要想测试是否成功非常的简单,首先在前面的jsp页面里面,得到文章的标题,即article.getTitle(),其是从数据库当中取得数据,假如我们是用Hibernate做数据持久化,那么我们可以把Hibernate的访问数据库的sql语句显示出来,当我们第一次访问jsp页面的时候,肯定显示查询数据库语句,这时候我们再次的访问这个jsp页面,如果这个时候访问明显变得快了,并且后台没有输出sql语句,那么说明缓存配置成功了。 

二、对整个页面的缓存 
要想对整个页面的缓存,首先的准备工作同上面一样,然后在web.xml文件里面加上 

XML/HTML代码 

Java代码   收藏代码
  1.     
  2. <filter>    
  3.     <filter-name>cacheFilterfilter-name>     
  4.     <filter-class>com.opensymphony.oscache.web.filter.CacheFilterfilter-class>     
  5.     <init-param>    
  6.         <param-name>timeparam-name>     
  7.         <param-value>3600param-value>     
  8.     init-param>     
  9.     <init-param>    
  10.         <param-name>scopeparam-name>     
  11.         <param-value>applicationparam-value>     
  12.     init-param>     
  13. filter>         
  14.     
  15. <filter-mapping>    
  16.     <filter-name>cacheFilterfilter-name>     
  17.     <url-pattern>/user/article!list.dourl-pattern>     
  18. filter-mapping>     


其中下面的文章列表页面缓存的配置,就表示了对哪个请求做缓存,值得注意的是,这个缓存的配置一定要放在struts过滤器的前面。配置成功后,其测试的方法同上。 

三,对象的缓存。 

这里介绍的对象的缓存是通过和Spring的集成来实现的,其准备工作同上面一样,然后在spring的配置文件里面加上: 

XML/HTML代码 
Java代码   收藏代码
  1.     
  2. <oscache:config configLocation="classpath:oscache.properties" id="cacheProvider" />    
  3. <oscache:annotations providerId="cacheProvider">    
  4.     <oscache:caching id="testCaching" cronExpression="0 1 * * *" refreshPeriod="86400" />    
  5.     <oscache:flushing id="testFlushing" />    
  6. oscache:annotations>     
  7.     
  8. <bean id="cacheManager" class="org.springmodules.cache.provider.oscache.OsCacheManagerFactoryBean">    
  9.     <property name="configLocation" value="classpath:oscache.properties" />    
  10. bean>     

其中cronExpression的含义同前面介绍的cron表达式是一样的,然后我们对一个对象的一个方法来作缓存,我们在ArticleService类里面加上: 

Java代码 
Java代码   收藏代码
  1. @Cacheable(modelId = "testCaching")     
  2. public Article getArticle(long id);      


即在得到一个Article对象的方法上加上Cacheable注解,表示为其作缓存,其中的testCaching就是spring配置文件里面的testCaching。 
通过上面的配置,我们在前端访问getArticle这个方法后,其得到的Article的实例就放到缓存里面了,要想测试是否成功,可以同上面介绍的相同方法来进行测试。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值