`
bjlf1105
  • 浏览: 24749 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate缓存策略之二级缓存

阅读更多

一级缓存,即session级缓存,是最最重要的,因为它不能够被取消,现在看看二级缓存.

 

 Hibernate二级缓存不是由本身维护的,它是由第三发缓存框架来提供的。看一下如何使用二级缓存:

1、首先要打开二级缓存
<!-- 配置打开二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>

2、指定缓存提供商。即有谁来提供缓存的功能
<!-- 指定二级缓存的具体实现! -->
<property name="hibernate.cache.provider_class">
org.hibernate.cache.HashtableCacheProvider</property>
3、配置哪些实体类使用哪种缓存策略(只读策略、读写策略等等)
//前两步是hibernate配置文件中配置的,而这一步配置可在某个实体映射文件中进行配置。如下:
<class name="cn.lf.hibernate3.Person" table="t_person">
<cache usage="read-only"/>
<id name="id">
	<generator class="native"/>
</id>
//也可以在hibernate配置文件中进行配置,这样的话就不用在映射文件中去修改了,直接改配置文件即可,如下:
<class-cache class="" usage="read-only"/>
//usage:read-write

  测试代码如下:

Session session = HibernateUtil.openSession();
try{
	session.beginTransaction();
	//将发出SQL查询语句查询实体对象的数据
	Person p = (Person)session.load(Person.class, 1);
	System.out.println(p.getName());
	//实体对象已经被缓存,所以下列操作不再发出SQL语句
	Person p2 = (Person)session.load(Person.class, 1);
	System.out.println(p2.getName());
	session.getTransaction().commit();
}catch(Exception e){
	e.printStackTrace();
	session.getTransaction().rollback();
}finally{
	//session关闭之后,当前session对象中的一级缓存已经被清空
	session.close();
}
Session session2 = HibernateUtil.openSession();
try{
	session2.beginTransaction();
	//由于启用了二级缓存,所以实体对象已经被缓存,所以下列操作不再发出SQL语句
	Person p = (Person)session2.load(Person.class, 1);
	System.out.println(p.getName());
	//不再发出SQL语句!
	Person p2 = (Person)session2.load(Person.class, 1);
	System.out.println(p2.getName());
	session2.getTransaction().commit();
}catch(Exception e){
	e.printStackTrace();
	session2.getTransaction().rollback();
}finally{
	session2.close();
}

 下面来研究下二级缓存的管理:

Session session = HibernateUtil.openSession();
try{
	session.beginTransaction();
	//将发出SQL查询语句查询实体对象的数据
	Person p = (Person)session.load(Person.class, 1);
	System.out.println(p.getName());
	//实体对象已经被缓存,所以下列操作不再发出SQL语句
	Person p2 = (Person)session.load(Person.class, 1);
	System.out.println(p2.getName());
	session.getTransaction().commit();
}catch(Exception e){
	e.printStackTrace();
	session.getTransaction().rollback();
}finally{
	//session关闭之后,当前session对象中的一级缓存已经被清空
	session.close();
}
Session session2 = HibernateUtil.openSession();
try{
	session2.beginTransaction();
	session.getSessionFactory().getCache().evictEntityRegion(ContactPerson.class);


	//由于清空了二级缓存,所以再次发出SQL语句
	Person p = (Person)session2.load(Person.class, 1);
	System.out.println(p.getName());
	//不再发出SQL语句!
	Person p2 = (Person)session2.load(Person.class, 1);
	System.out.println(p2.getName());
	session2.getTransaction().commit();
}catch(Exception e){
	e.printStackTrace();
	session2.getTransaction().rollback();
}finally{
	session2.close();
}

 如果定义二级缓存为只读缓存那么是不允许修改的。

了解下缓存模式,即如何跟二级缓存进行交互:CacheMode

 

 

分享到:
评论

相关推荐

    Hibernate缓存策略(一级缓存、二级缓存).docx

    Hibernate是一个持久化框架,经常需要访问数据库。如果我们能够降低应用程序对物理数据库访问的频次,那会提供应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序运行时先从缓存中读写数据。

    Hibernate缓存技术研究

    Hibernate是一种面向Java环境的ORM工具。系统地分析了Hibernate的缓存结构,并描述了二级缓存的查询过程、缓存策略;同时总结了二级缓存使用中的一些限制,以及使用二级缓存的优化策略。

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    NULL 博文链接:https://364232252.iteye.com/blog/2369161

    hibernate 3中的缓存小结

    Hibernate允许在类和集合的粒度上设置第二级缓存。在映射文件中,和元素都有一个子元素,这个子元素用来配置二级缓存。 示例:以category(产品类别)和product(产品)的映射为例: 1) 修改要配置缓存的那个持久化类的...

    hibernate基础教程

    Hibernate中使用了一级缓存和二级缓存的机制来提高程序的性能. 一 为什么要使用缓存? 缓存是一块存储区域,可能是一块内存,也可能是一块硬盘.缓存能起到缓冲的作用,把程序经常使用...

    Hibernate缓存管理

    doc格式。当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发...在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定四种类型的并发访问策略,每一种策略对应一种事务隔离级别。

    Hibernate3性能优化 Hibernate_regerence3.12

    有很多人认为Hibernate天生效率比较低,确实,在...特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略: 1.抓取优化 2.二级缓存 3.批量数据操作 4.杂项

    spring hibernate 事务管理学习笔记(二)

    NULL 博文链接:https://microjava.iteye.com/blog/525981

    Hibernate学习笔记

    Hibernate 学习笔记 get和load的区别 一对一,一对多,多对多 悲观锁,乐观锁 hibernate查询语言hql hibernate一级缓存、二级缓存 抓取策略

    马士兵hibernate学习笔记(原版)

    目录 课程内容 1 HelloWorld 2 Hibernate原理模拟 - 什么是O/R Mapping以及为什么... 4 一级缓存和二级缓存和査询缓存(面试题)(详见hibernate_3000_Hibernate_3KindsOf_Cache) 5 事务并发处理(面试的意义更大)

    hibernate学习笔记

    Hibernate 学习笔记 Hibernate 学习笔记 1 ...hibernate二级缓存 47 Hibernate Gossip: 二级快取(Second-level) 48 hibernate查询缓存 50 hibernate抓取策略 53 Hibernate最佳实践(Best Practices) 55

    08.拓薪教育-hibernate4.3的hibernate.cfg.xml基本配置.part2

    hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,...

    Hibernate3开发.pdf

    系统学习Hibernate3的开发知识,循序渐进 ... 包括:抓取策略、集合的性能、二级缓存、查询缓存、管理缓存 第七章:基本实现原理 包括:分增删改查的操作说明Hibernate基本的实现原理 第八章:最佳实践

    Hibernate+中文文档

    3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     22.4 管理Hibernate的第二级缓存  22.4.1 配置进程范围内的第二级缓存  22.4.2 配置集群范围内的第二级缓存  22.4.3 在应用程序中管理第二级缓存  22.4.4 Session与第二级缓存的交互模式  22.5 运行本章的...

    Hibernate 课件及源代码

    内容涵盖安装 Hibernatetools 插件、Session 核心方法、持久化对象生命周期、对象关系映射(1-n、1-1、n-n、继承映射)、检索策略、检索方式(对象导航图、OID 检索、HQL、QBC、本地SQL)、Hibernate 一\二级缓存、...

    HibernateAPI中文版.chm

    3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...

    hibernate3.2中文文档(chm格式)

    3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...

    08.拓薪教育-hibernate4.3的hibernate.cfg.xml基本配置.part1

    hibernate.cfg.xml配置,hbm.xml映射文件详解,主键生成策略使用,PO对象状态及状态的转换分析、一级缓存,Hibernate数据检索技术,Hibernate高级映射技术,Hibernate多表联合查询, Hibernate二级缓存技术,...

    hibernateRedis缓存所需的jar包

    Redis作为hibernate的二级缓存策略,提供所需的jar包,亲自测试过可用。包含了hibernate-redis-2.3.2.jar、redisson-2.5.1.jar等

Global site tag (gtag.js) - Google Analytics