hibernate学习笔记(二级缓存)
2012-07-10 12:15
411 查看
有人曾经问过gave king 问他hibernate最值得他骄傲的地方是什么?大家都以为他会说:是他提供的映射文件,面向对象化的操作。
而他却说:最值得骄傲的是他的缓存机制:
hibernate的缓存机制分为一级缓存和二级缓存,一级缓存即sessio级别的。二级缓存是sessionFactory级别的。
在二级缓存中,它不仅可以保存在内存中,还可以保存在硬盘上。当然这种缓存机制主要是针对大量的数据进行操作。如果数据量较少,可以采用一级缓存。
我采用的EhCache缓存。ehcache 是一个非常轻量级的缓存实现。
实现二级缓存:
1.导入jar包;两个:asm-attrs.jar,commons-logging-1.1.1.jar.
2.在主配置文件中添加属性:
注意:在这有4个值:有必要对这4个值进行介绍。
A.transactional:保存可重复的事物隔离级别,对于读/写比例大,很少更新的数据通常可以采用这种方式。
B.read-write:使用timestamp机制维护已提交的事物隔离级别,对于读/写比例大,很少更新的数据通常可以采用这种方式。
C.nonstrict-read-write:二级缓存与数据库中的数据可能会出现不一致的情况。应该设置足够短的缓存过期时间。否则就有可能从缓存中读取到脏数据,当一些数据很少改变(一天,两天都不改变的数据)并且这些数据如果出现数据库与缓存不一致的情况下影响并不大的时候,那么可以采用这种缓存策略。
D.read-only:当确定数据不会被更改时。我们可以使用这种缓存策略。
4.编写ehcache.xml文件。在src目录下新建一个这个文件
然后可以测试了。
如果不配置二级缓存的话。它肯定是执行3条sql,但是配置了。就可以将后两条sql省略了。
over...
而他却说:最值得骄傲的是他的缓存机制:
hibernate的缓存机制分为一级缓存和二级缓存,一级缓存即sessio级别的。二级缓存是sessionFactory级别的。
在二级缓存中,它不仅可以保存在内存中,还可以保存在硬盘上。当然这种缓存机制主要是针对大量的数据进行操作。如果数据量较少,可以采用一级缓存。
我采用的EhCache缓存。ehcache 是一个非常轻量级的缓存实现。
实现二级缓存:
1.导入jar包;两个:asm-attrs.jar,commons-logging-1.1.1.jar.
2.在主配置文件中添加属性:
<!-- 使用二级缓存 --> <property name="hibernate.cache.use_second_level_cache"> true </property> <property name="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </property>3.在映射文件中配置:<cache usage="read-only"/>
注意:在这有4个值:有必要对这4个值进行介绍。
A.transactional:保存可重复的事物隔离级别,对于读/写比例大,很少更新的数据通常可以采用这种方式。
B.read-write:使用timestamp机制维护已提交的事物隔离级别,对于读/写比例大,很少更新的数据通常可以采用这种方式。
C.nonstrict-read-write:二级缓存与数据库中的数据可能会出现不一致的情况。应该设置足够短的缓存过期时间。否则就有可能从缓存中读取到脏数据,当一些数据很少改变(一天,两天都不改变的数据)并且这些数据如果出现数据库与缓存不一致的情况下影响并不大的时候,那么可以采用这种缓存策略。
D.read-only:当确定数据不会被更改时。我们可以使用这种缓存策略。
4.编写ehcache.xml文件。在src目录下新建一个这个文件
<?xml version="1.0" encoding="UTF-8"?> <ehcache> <!-- 如果内存放不下,就放到磁盘上的一个路径 --> <diskStore path="d:/ehcache"/> <!-- 内存中存放最多的对象个数 --> <defaultCache maxElementsInMemory="200" eternal="false" timeToIdleSeconds="50" timeToLiveSeconds="60" overflowToDisk="true" /> <!-- 保存的对象 --> <cache name="com.test.bean.Student" maxElementsInMemory="200" eternal="false" timeToIdleSeconds="50" timeToLiveSeconds="60" overflowToDisk="true"/> </ehcache>配置基本上就完成了。
然后可以测试了。
Session session1=sessionfactory.openSession(); Transaction tx1=session1.beginTransaction(); List<Student> list=session.createQuery("from Student s order by s.name asc").list(); for(Student stu:list){ System.out.println(stu.getName()); } tx1.commit(); System.out.println("---------------------------"); Session session2=sessionfactory.openSession(); Transaction tx2=session2.beginTransaction(); Student s1=(Student)session2.get(Student.class, "4028ab81386ed77b01386ed77d57000c"); Student s2=(Student)session2.get(Student.class, "4028ab81386ed77b01386ed77d570011"); System.out.println(s1.getName()); System.out.println(s2.getName()); tx2.commit();开启两个session和两个transaction。
如果不配置二级缓存的话。它肯定是执行3条sql,但是配置了。就可以将后两条sql省略了。
over...
相关文章推荐
- Hibernate学习笔记----二级缓存
- Hibernate视频学习笔记(13)一级缓存_二级缓存_查询缓存
- [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存
- hibernate二级缓存学习笔记
- Hibernate二级缓存的注解(学习笔记)
- 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】
- Java学习之道:hibernate二级缓存的实现
- JPA学习笔记-二级缓存
- Hibernate学习笔记 -- day05 缓存、快照机制、对象状态
- Hibernate学习笔记之三种缓存
- 【Hibernate框架开发之九】Hibernate 性能优化笔记!(遍历、一级/二级/查询/缓存/乐观悲观锁等优化算法)
- Hibernate缓存学习笔记
- {传智播客} (学习笔记)--Hibernate的Session缓存问题与理解
- Mybatis学习笔记-一级缓存与二级缓存
- JPA学习笔记-二级缓存
- hibernate学习:QBC及二级缓存
- hibernate学习笔记5 ------ 缓存,注解
- Hibernate学习手记(7)--二级缓存设置
- Hibernate2.0缓存学习笔记
- [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别