`

Hibernate二级缓存及产品Oscache

 
阅读更多
二级缓存也称进程级的缓存或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代码
<taglib>    
        <taglib-uri>oscachetaglib-uri>     
        <taglib-location>/WEB-INF/classes/oscache.tldtaglib-location>     
taglib>   



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

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


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

XML/HTML代码
<os:cache key="1" time="1800" scope="session">    
<%   
    ArticleAction action = new ArticleAction();   
    List<Article> list = action.testOscache();   
    for(int i = 0; i < list.size(); i++){   
        Article article = list.get(i);   
        out.println(article.getTitle());   
    }   
%>  
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代码
  
<filter>  
    <filter-name>cacheFilterfilter-name>   
    <filter-class>com.opensymphony.oscache.web.filter.CacheFilterfilter-class>   
    <init-param>  
        <param-name>timeparam-name>   
        <param-value>3600param-value>   
    init-param>   
    <init-param>  
        <param-name>scopeparam-name>   
        <param-value>applicationparam-value>   
    init-param>   
filter>       
  
<filter-mapping>  
    <filter-name>cacheFilterfilter-name>   
    <url-pattern>/user/article!list.dourl-pattern>   
filter-mapping>   


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

三,对象的缓存。

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

XML/HTML代码
  
<oscache:config configLocation="classpath:oscache.properties" id="cacheProvider" />  
<oscache:annotations providerId="cacheProvider">  
    <oscache:caching id="testCaching" cronExpression="0 1 * * *" refreshPeriod="86400" />  
    <oscache:flushing id="testFlushing" />  
oscache:annotations>   
  
<bean id="cacheManager" class="org.springmodules.cache.provider.oscache.OsCacheManagerFactoryBean">  
    <property name="configLocation" value="classpath:oscache.properties" />  
bean>   


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

Java代码
@Cacheable(modelId = "testCaching")   
public Article getArticle(long id);    


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

分享到:
评论

相关推荐

    hibernate 二级缓存详解

    在Hibernate中,二级缓存可以使用不同的提供商,例如Ehcache和OSCache。配置Ehcache作为二级缓存提供商,需要在Hibernate的配置文件中设置`hibernate.cache.provider_class`为`...

    hibernate+oscache实现二级缓存实例

    本实例将介绍如何结合Hibernate和OSCache实现二级缓存,以优化应用程序的性能。 一级缓存是Hibernate内置的Session级别的缓存,它存储了在同一个Session内操作的对象,避免了频繁的数据库读写。然而,一级缓存仅...

    hibernate二级缓存

    ### Hibernate 二级缓存详解 #### 一、二级缓存概念与作用 在 Hibernate 中,为了提高查询效率和减少数据库的访问压力,引入了缓存机制。缓存分为一级缓存(Session 级别)和二级缓存(SessionFactory 级别)。...

    Hibernate二级缓存攻略

    Hibernate二级缓存是一种持久化层缓存机制,用于提高数据访问效率。一级缓存是由Hibernate的Session提供的,它是一个事务性的缓存,每个Session都有自己的独立缓存,同一个ID的对象在同一个Session内多次加载只会...

    Hibernate二级缓存.doc

    ### Hibernate二级缓存详解 #### 一、概述与背景 Hibernate作为一款优秀的Java持久层框架,在提高开发效率的同时,也面临着性能优化的问题。缓存机制是解决这一问题的关键技术之一。Hibernate提供了两种缓存机制:...

    Hibernate_二级缓存 实验心得,手册

    通过本次实验,不仅深入了解了Hibernate二级缓存的基本概念和工作原理,还掌握了如何通过配置来优化二级缓存的使用。实践证明,合理的缓存策略能够显著提升系统的性能表现。在实际开发过程中,还需要结合具体的应用...

    Hibernate_二级缓存总结

    Hibernate支持多种二级缓存实现,如EhCache、JBossCache和OsCache等。二级缓存主要用于存储实体对象,提高了数据检索的效率。 **3. QueryCache** QueryCache是Hibernate的另一种缓存机制,用于缓存查询语句及其返回...

    hibernate对二级缓存的理解

    《深入理解Hibernate二级缓存机制》 在Java的持久化框架Hibernate中,缓存机制扮演着重要的角色,尤其是在处理大量数据时,它可以显著提高应用程序的性能。然而,许多人对Hibernate的二级缓存可能存在误解,因此...

    Hibernate OSCache缓存

    为了提高性能,Hibernate 提供了缓存机制,其中 OSCache 是一种广泛使用的二级缓存解决方案。OSCache 是一个开放源码的高性能缓存系统,适用于多种应用环境,包括 Web 应用、EJB 和独立应用。 **1. 安装与配置 ...

    二级缓存详解

    在Hibernate3中,二级缓存是一个重要的特性,它可以帮助提高应用程序性能,减少对数据库的直接访问。以下是关于"二级缓存详解"的详细知识: 二级缓存是指在SessionFactory级别上维护的数据缓存,它不同于一级缓存...

    Hibernate缓存,性能优化

    Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动管理。它存储了当前会话期间加载的所有实体对象和关联的集合对象。当会话关闭时,一级缓存中...

    Hibernate的缓存策略

    常见的二级缓存插件有Ehcache、OSCache等。 - **数据一致性问题**:由于二级缓存中的数据是数据库数据的副本,因此需要解决数据一致性的问题。通常情况下,可以通过配置缓存策略(如读写策略、刷新策略等)来保证...

    Hibernate的cache缓存解析

    实现二级缓存需要依赖第三方库,如EHCache、OSCache等。 #### Hibernate缓存的工作机制 1. **一级缓存的工作机制** - 当通过`Session`执行查询或加载操作时,首先会检查一级缓存中是否存在所需的数据。 - 如果一...

    Hibernate教程25_Hibernate缓存

    Hibernate提供了不同级别的缓存,包括一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存),还有第三方缓存插件如EhCache、 OSCache等。 **压缩包子文件的文件名称列表:** "s2sh_relation24_3...

    JSP 开发之hibernate配置二级缓存的方法

    hibernate二级缓存也称为进程级的缓存或SessionFactory级的缓存。 二级缓存是全局缓存,它可以被所有的session共享。 二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。 ...

    Hibernate的缓存机制.docx

    在Hibernate中,缓存主要分为三个层次:一级缓存、二级缓存以及集群范围的缓存。 一级缓存,也称为Session缓存,存在于单个Session实例中。其目的是减少对数据库的访问次数,提高程序效率。一级缓存仅在Session生命...

    带二级缓存和业务封装的SSH项目源码

    这个项目中的二级缓存可能使用了EhCache或OSCache等第三方缓存解决方案,将经常访问的数据存储在内存中,减少数据库查询次数,提高响应速度。 **业务封装** 是指将业务逻辑抽象出来,形成独立的服务或组件,以便于...

Global site tag (gtag.js) - Google Analytics