创建一个Java工程OSCacheTest,在其中引入Hibernate 3.2的类库文件。因为需要使用OSCache,还需要引入oscache-2.1.jar包。
一般使用OSCache缓存需要进行三个步骤的配置,具体如下:
步骤一:在Hibernate中配置OSCache
1. 在Hibernate配置文件中打开二级缓存的配置,如下:
<property name="cache.use_second_level_cache">true</property>
2. 这个值在配置文件中,缺省是打开的。这只是打开二级缓存,并没有指定使用哪个二级缓存。所以需要指定使用的何种二级缓存。配置如下:
<property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property>
特别注意:关于二级缓存的配置,必须在<mapping resource="…………" />配置之前,否则报错
步骤二:配置OSCache配置文件
关于缓存中存放多少数据,Hibernate是不关心的,全部由OSCache来完成。需要将OSCache的配置文件oscache.properties放入classpath中(注意不能修改这个文件名),对二级缓存进行具体配置。
在oscache.properties中,有如下的参数配置:cache.capacity=1000
这个数值代表放入缓存的对象数量,这个数量根据用户机器的内存来配置,一般只需要配置这个参数即可。
步骤三:通知Hibernate那些类需要OSCache进行缓存
这个步骤有两种方式可以使用,其作用相同:
第1种:在hibernate.cfg.xml的session-factory中加入:
<class-cache usage="read-only" class="com.mixele.oscache.entity.UserOS"/>
第2种:在映射文件的class元素加入子元素:<class-cache usage="read-only" />
关于usage属性,有4个值可以配置:
read-only:只读,缓存效率最高,用于不更新的数据
read-write:可读写
nonstrict-read-write:用于不重视并发修改的操作(会出现一定的错误数据,即不同步数据)
transactional:事务缓存,可支持事务回滚(OSCache中没有此项功能)
经过以上配置,OSCache缓存就已经生效。
编写测试程序:
Hibernate配置:
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/cachetest</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<property name="cache.use_second_level_cache">true</property>
<property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property>
<property name="generate_statistics">true</property>
<mapping resource="com/mixele/oscache/entity/UserOS.hbm.xml" />
</session-factory>
</hibernate-configuration>
POJO类及hbm:
public class UserOS {
private int id;
private String name;
private Date birthday;
………………
}
<hibernate-mapping package="com.mixele.oscache.entity">
<class name="UserOS">
<cache usage="read-only"/>
<id name="id"> <generator class="native"/> </id>
<property name="name" length="100"/>
<property name="birthday"/>
</class>
</hibernate-mapping>
缓存测试类:
public class CacheTest{
public static void main(String [] args) {
int num = 1;
DataPutInDB.saveData(num);
for(int i=0;i<num;i++) {
getOSCacheCache(i+1);
}
Statistics st = HibernateUtil.getSessionfactory().getStatistics();
System.out.println("输出统计信息............");
System.out.println(st);
System.out.println("放入: "+st.getSecondLevelCachePutCount()+"次");
System.out.println("命中: "+st.getSecondLevelCacheHitCount()+"次");
System.out.println("失去: "+st.getSecondLevelCacheMissCount()+"次");
}
static UserOS getOSCacheCache(int id) {
Session s = null;
UserOS useros = null;
try{
s = HibernateUtil.getSession();
useros = (UserOS)s.get(UserOS.class, id);//第一次查询,二级缓存中没有信息,miss一次
useros = (UserOS)s.load(UserOS.class, id);//第二次查询,在一级缓存中找到,不进入二级缓存
s.clear();//清空一级缓存
}finally{
if(s != null){
s.close();
}
}
for(int i=1;i<101;i++){
try{
s = HibernateUtil.getSession();
useros = (UserOS)s.get(UserOS.class, id);//在二级缓存中找到,hit两次
System.out.println("第"+i+"次从二级缓存查找 "+useros.getClass());
}finally{
if(s != null){ s.close(); }
}
}
return useros;
}
}
分享到:
相关推荐
在 JSP 页面中,可以通过以下方式使用 OSCache 标签库进行缓存配置: ```jsp <%@ taglib uri="http://www.opensymphony.com/oscache" prefix="oscache" %> <oscache:cache page="true" timeToLive="600"> <!-- ...
在本实例中,我们将看到如何配置OSCache与Hibernate集成,以及如何在实际项目中使用这些缓存策略。 首先,我们需要在Hibernate的配置文件(如`hibernate.cfg.xml`)中启用二级缓存并指定OSCache为缓存提供者。添加...
在使用 Hibernate OSCache 缓存之前,首先需要在项目中引入必要的依赖。将 `oscache.jar` 文件放入 `/WEB-INF/lib` 目录或相应的类库目录。同时,需要一个 `oscache.properties` 配置文件,通常放在项目的 `src` 根...
hibernate-distribution-3.3.2.GA-dist.zip 下载地址:http://sourceforge.net/projects/hibernate/files/hibernate3/3.3.2.GA/ 搭建hibernate的相关Jar包,可以帮助初学者。 slf4j-log4j12-1.6.1.jar swarmcache-...
在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,尤其在基于Spring或Hibernate的应用中,OSCache扮演着关键的角色。 `oscache.tld` 文件是 Tag Library Descriptor (TLD) 文件,它是JSP 2.0规范的...
在 `web.xml` 文件中添加 `<taglib>` 标签来声明 OSCache 的 TLD 文件,以便在 JSP 页面中使用 OSCache 标签库。 接下来,通过创建 JSP 页面来测试缓存功能。例如,`cache1.jsp` 使用 `<cache:cache>` 标签缓存页面...
- 在Web应用中,可以利用OSCache缓存JSP页面、EJB会话bean、Hibernate查询结果等,减少服务器负载。 - 在服务端,可以缓存经常访问的API响应,提升响应速度,改善用户体验。 - 结合Spring框架,可以通过AOP(面向...
在Web应用中,缓存页面的输出结果能够显著降低服务器与数据库之间的交互频率,进而改善系统运行效率。使用Cache后,随着循环次数增加,应用的性能下降会比未使用Cache时更为平缓,CPU利用率更高,这意味着应用服务器...
OSCache 是一个广泛使用的缓存解决方案,它支持多种技术,如 Hibernate、JSP 和页面缓存。本篇文章将深入探讨 OSCache 的配置和使用方法。 首先,安装 OSCache 包括以下几个步骤: 1. 从官方网站...
在这个"OSCache学习例子 实例"中,我们将深入探讨如何在J2EE环境中集成并使用OSCache。 首先,理解OSCache的基本概念至关重要。OSCache的核心功能是提供内存中的对象缓存,它支持两种主要的缓存模式:本地缓存和...
将`oscache.tld`文件复制到`/WEB-INF/classes`目录,这是OSCache的标签库文件,用于在JSP中使用OSCache的功能。 4. **web.xml配置**: 在`web.xml`文件中添加OSCache的标签库引用,如下所示: ```xml <taglib...
hibernate各个包 ...hibernate-oscache: 支持oscache的缓冲解决方案。(OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。 O
OSCache支持多种缓存策略,并且可以方便地集成到基于Java的Web应用程序中,尤其是那些基于JBoss、Hibernate或Spring框架的应用程序。 ### 安装步骤 1. **下载OSCache:** 访问官方网址 ...
- OpenSymphony OSCache - runtime, optional asm.jar (unknown) - ASM bytecode library - runtime, required ant-launcher-1.6.5.jar (1.6.5) - Ant launcher - buildtime jaas.jar (unknown) - Standard JAAS ...
osCache的核心功能包括对象缓存、页面缓存以及分布式缓存,使得在大型Java应用系统中能够更有效地管理内存资源。** **1. 对象缓存:** osCache允许开发者将Java对象存储到内存中,以避免每次需要这些对象时都去重新...
在Hibernate中配置二级缓存,需要在映射文件中使用元素,以及选择合适的缓存提供者,如EhCache、OSCache等。 6. 最佳实践:最佳实践是指在使用Hibernate时推荐的一些开发习惯和技术选择。例如,应该尽量使用双向...
- 例如,如果一个对象在同一事务中被多次修改,Hibernate 只会在事务结束时生成一条包含所有更改的 SQL UPDATE 语句。 ##### 二级缓存 (Second-level Cache) - **作用范围**:与 SessionFactory 对象关联。 - **...
在Hibernate中,二级缓存可以使用不同的提供商,例如Ehcache和OSCache。配置Ehcache作为二级缓存提供商,需要在Hibernate的配置文件中设置`hibernate.cache.provider_class`为`...