`
wkkyo
  • 浏览: 30017 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate缓存学习笔记

    博客分类:
  • Java
阅读更多

 

Hibernate在进行数据读取时会先在缓存里找,缓存中不存在时再去数据库查询,合理使用hibernate缓存能够有效的利用内存,减少物理数据库调用的次数.

 

ORM缓存策略

1.事务级缓存(session level cache)

session生命周期的缓存,关闭session即消亡

2.应用级/进程级缓存(sessionFactory level cache)

某个应用中的共享缓存,多个事务可以共享,在sessionFactory层实现,所有sessionFactory创建的session可以共享.

3.分布式缓存

多个JVM共享的缓存,通过远程机制实现缓存数据同步,任意实例修改数据,所有的JVM都要更新缓存.

 

Hibernate数据缓存

1.内部缓存(session level)一级缓存

是事务级的缓存,session中维护的一个Map,Map的key是包含了数据类型和id,从数据库加载的数据都会进入Map缓存中,通过session加载数据时会先在session缓存里找,一级缓存是session的private数据,session实例消亡就清除了,在应用中就保持在一次请求的开始和结束之间.

一般由Hibernate自动维护,也支持手动维护

session.evit(Object obj) 将持久化对象从一级缓存中清除.

session.clear()  清空一级缓存

session.contains(Object obj) 判断指定的对象是否存在于一级缓存中. 

session.flush() 刷新一级缓存区的内容,使缓存与数据库数据保持同步. 

 

2.二级缓存(sessionFactory level)

包含了应用级和分布式的缓存,由本sessionFactory的所有session实例共享,session操作时会先查一级缓存,然后查二级缓存,最后再查物理数据库.要使用二级缓存必须要进行配置.

 

适合用缓存的数据

1.不会被其他应用修改

包括直接用JDBC修改等,因为其他应用修改了数据之后hibernate并不知道,不能自动更新缓存,不过可以手动更新缓存

2.数据大小可以接受,毕竟内存资源也不多

3.数据更新频率低(比如数据字典等常量数据)

4.可能被系统频繁使用

5.非关键的数据

6.不会被并发访问的数据

 

常用的二级缓存插件

EHCache  org.hibernate.cache.EhCacheProvider 

OSCache  org.hibernate.cache.OSCacheProvider 

SwarmCahe  org.hibernate.cache.SwarmCacheProvider 提供了分布式

JBossCache  org.hibernate.cache.TreeCacheProvider 提供了分布式

 

EHCache二级缓存配置方法

1.启用二级缓存首先要在hibernate.cfg.xml配置

<hibernate-configuration>  
   <session-factory>  
      <!-- 配置二级缓存插件EHCache的Provider类-->  
      <property name="hibernate.cache.provider_class">  
         org.hibernate.cache.EhCacheProvider  
      </property>  
      <!-- 启动"查询缓存" -->  
      <property name="hibernate.cache.use_query_cache">  
         true  
      </property>  
   </session-factory>  
 </hibernate-configuration>

 

 

2.然后配置cache的配置文件ehcache.xml

 

<ehcache>  
  <!-- maxElementsInMemory为缓存对象的最大数目,
	eternal设置是否永远不过期,
	timeToIdleSeconds对象处于空闲状态的最多秒数,
	timeToLiveSeconds对象处于缓存状态的最多秒数,
	overflowtodisk内存不足时是否启用磁盘缓存 -->  
  <diskStore path="java.io.tmpdir"/>  
  <defaultCache maxElementsInMemory="10000" eternal="false"  timeToIdleSeconds="300"            timeToLiveSeconds="600" overflowToDisk="true"/>
</ehcache>
 

 

3.最后要在映射文件***.hbm.xml中指定实体的缓存同步策略

<?xml version="1.0" encoding='UTF-8'?>  
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >  
<hibernate-mapping>  
   <class>  
       <!-- 设置该持久化类的二级缓存并发访问策略-->  
       <cache usage="read-write"/>
	<set name = "xxx">
		<cache usage="read-only" />
   	</set>
   </class>
</hibernate-mapping>

 

 

hibernate提供的缓存同步策略,可以在usage中设置

read-only

只读

nonstrict-read-write

更新频率不高

read-write

严格可读写

transactional(Ecache不支持)

事务型缓存

 

 

 

 

分享到:
评论

相关推荐

    Hibernate学习笔记

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

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

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

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

    hibernate学习笔记

    Hibernate 学习笔记 Hibernate 学习笔记 1 第一个hibernate项目(hibernate_first) 2 测试实体对象的生命周期(hibernate_session) 3 hibernate基本映射(hibernate_basemapping) 4 class实体类---表 4 标签id 5 ...

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

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

    hibernate笔记

    这是我在学习时记录的hibernate笔记,比较详细。对一些比较琐碎的例如一级二级缓存有较为详细的讲解。

    MyBatis第一天课堂笔记.docx

    门槛高在怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate缓存与数据加载策略方面需要你的经验和能力都很强才行。国内目前前的情况精通hibernate技术大牛非常少。 3. sql优化方面,...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    mybatis学习笔记

    1.6.9 与hibernate不同 16 2 Dao开发方法 16 2.1 需求 16 2.2 SqlSession的使用范围 17 2.2.1 SqlSessionFactoryBuilder 17 2.2.2 SqlSessionFactory 17 2.2.3 SqlSession 17 2.3 原始Dao开发方式 18 2.3.1 映射文件...

    Java_HibernateDemoDay1

    第1章 Hibernate_day01 笔记 1.1 Hibernate 框架的学习 路线 第一天:Hibernate 的入门(Hibernate 的环境搭建、Hibernate 的API、Hibernate 的 CRUD) 第二天:Hibernate 的一级缓存、其他的 API 第三天:Hibernate...

    springboot信息化在线教学平台的设计与实现.zip

    技术栈方面,除了Spring Boot作为主要后端框架外,该项目可能还使用了如MyBatis或Hibernate的ORM框架,MySQL或PostgreSQL作为数据库,Redis用于缓存,以及前端技术如AngularJS、React或Vue.js等。该资源包适合软件...

    learning-notes:学习一些东西

    哨兵模式和Redis-Cluster集群)2.Redis内存回收机制3.Redis笔记4.Redis Cluster原理5.Redis锁6.Redis分库分表分库分表网络1.https原理2.TCP与UDPMyBatis一级与二级缓存hibernate一级与二级缓存Spring1.循环依赖MySQL...

    jive.chm

    2 jcs学习笔记 3 关于Hibernate的Cache问题 4 用缓冲技术提高JSP应用的性能和稳定性 5 SwarmCache入门 &lt;br&gt; 源代码研究 1 Jive中的全局配置 2 Jive源代码情景分析-index....

Global site tag (gtag.js) - Google Analytics