`
精神分裂
  • 浏览: 29216 次
  • 性别: Icon_minigender_1
  • 来自: 二次元世界
社区版块
存档分类
最新评论

OSCache - 在Hibernate中使用

阅读更多
创建一个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;
	}
}
分享到:
评论

相关推荐

    Oscache-入门教程.doc

    在 JSP 页面中,可以通过以下方式使用 OSCache 标签库进行缓存配置: ```jsp &lt;%@ taglib uri="http://www.opensymphony.com/oscache" prefix="oscache" %&gt; &lt;oscache:cache page="true" timeToLive="600"&gt; &lt;!-- ...

    hibernate+oscache实现二级缓存实例

    在本实例中,我们将看到如何配置OSCache与Hibernate集成,以及如何在实际项目中使用这些缓存策略。 首先,我们需要在Hibernate的配置文件(如`hibernate.cfg.xml`)中启用二级缓存并指定OSCache为缓存提供者。添加...

    Hibernate OSCache缓存

    在使用 Hibernate OSCache 缓存之前,首先需要在项目中引入必要的依赖。将 `oscache.jar` 文件放入 `/WEB-INF/lib` 目录或相应的类库目录。同时,需要一个 `oscache.properties` 配置文件,通常放在项目的 `src` 根...

    搭建hibernate的相关Jar包

    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-...

    OSCache需要的包

    在Java Web开发中,OSCache常被用于实现Session复制和分布式缓存,尤其在基于Spring或Hibernate的应用中,OSCache扮演着关键的角色。 `oscache.tld` 文件是 Tag Library Descriptor (TLD) 文件,它是JSP 2.0规范的...

    oscache文档

    在 `web.xml` 文件中添加 `&lt;taglib&gt;` 标签来声明 OSCache 的 TLD 文件,以便在 JSP 页面中使用 OSCache 标签库。 接下来,通过创建 JSP 页面来测试缓存功能。例如,`cache1.jsp` 使用 `&lt;cache:cache&gt;` 标签缓存页面...

    一个OSCache缓存技术的关键zip包

    - 在Web应用中,可以利用OSCache缓存JSP页面、EJB会话bean、Hibernate查询结果等,减少服务器负载。 - 在服务端,可以缓存经常访问的API响应,提升响应速度,改善用户体验。 - 结合Spring框架,可以通过AOP(面向...

    Cache技术--OSCache

    在Web应用中,缓存页面的输出结果能够显著降低服务器与数据库之间的交互频率,进而改善系统运行效率。使用Cache后,随着循环次数增加,应用的性能下降会比未使用Cache时更为平缓,CPU利用率更高,这意味着应用服务器...

    OSCache使用说明

    OSCache 是一个广泛使用的缓存解决方案,它支持多种技术,如 Hibernate、JSP 和页面缓存。本篇文章将深入探讨 OSCache 的配置和使用方法。 首先,安装 OSCache 包括以下几个步骤: 1. 从官方网站...

    OSCache学习例子 实例

    在这个"OSCache学习例子 实例"中,我们将深入探讨如何在J2EE环境中集成并使用OSCache。 首先,理解OSCache的基本概念至关重要。OSCache的核心功能是提供内存中的对象缓存,它支持两种主要的缓存模式:本地缓存和...

    oscache缓存使用总结.doc

    将`oscache.tld`文件复制到`/WEB-INF/classes`目录,这是OSCache的标签库文件,用于在JSP中使用OSCache的功能。 4. **web.xml配置**: 在`web.xml`文件中添加OSCache的标签库引用,如下所示: ```xml &lt;taglib...

    hibernate_5.1包

    hibernate各个包 ...hibernate-oscache: 支持oscache的缓冲解决方案。(OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。 O

    OSCache使用文档

    OSCache支持多种缓存策略,并且可以方便地集成到基于Java的Web应用程序中,尤其是那些基于JBoss、Hibernate或Spring框架的应用程序。 ### 安装步骤 1. **下载OSCache:** 访问官方网址 ...

    hibernate3.1 jar包

    - 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的demo

    osCache的核心功能包括对象缓存、页面缓存以及分布式缓存,使得在大型Java应用系统中能够更有效地管理内存资源。** **1. 对象缓存:** osCache允许开发者将Java对象存储到内存中,以避免每次需要这些对象时都去重新...

    Hibernate4(关系映射-事务-原理-性能和二级缓存-最佳实践)

    在Hibernate中配置二级缓存,需要在映射文件中使用元素,以及选择合适的缓存提供者,如EhCache、OSCache等。 6. 最佳实践:最佳实践是指在使用Hibernate时推荐的一些开发习惯和技术选择。例如,应该尽量使用双向...

    hibernate caching

    - 例如,如果一个对象在同一事务中被多次修改,Hibernate 只会在事务结束时生成一条包含所有更改的 SQL UPDATE 语句。 ##### 二级缓存 (Second-level Cache) - **作用范围**:与 SessionFactory 对象关联。 - **...

    hibernate 二级缓存详解

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

Global site tag (gtag.js) - Google Analytics