`

【原】Hibernate 缓存

阅读更多

 Hibernate 缓存

一、什么是缓存,缓存的作用

       Hibernate是一个持久层框架,经常访问物理数据库,使用缓存可以降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。

缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。  Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理数据源中检索,所以,把频繁使用的数据加载到缓存区后,就可以大大减少应用程序对物理数据源的访问,使得程序的运行性能明显的提升。

二、Hibernate缓存分类

Hibernate缓存有两大类:

一级session级别缓存:属于Hibernate的内置缓存,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓存)由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存

二级SessionFactory级别缓存:由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别;第二级缓存是可选的,是一个可配置的插件;(什么样的类被适合放在二级缓存中:a: 经常被访问的数据;b: 数据量有限;c:改动少;如:用户的权限、组织机构等)

    三级缓存又成为查询缓存,是二级缓存的一种特殊情况。

三、怎么应用Hibernate缓存

1、  一级缓存

load()



 

Result:两次查询,只发一次SQL请求

  

 

在不同session里查询

 

 

Result:



 

hibernatesession提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,多线程查询数据,每次都要去不同的session里查找,这种情况下的查询,每个session关闭的时候,一级缓存就失效了。所以可以利用二级缓存解决此问题。

2、  二级缓存(The Second Level Cache)

1)、二级缓存是SessionFactory级别的全局缓存。Hibernate支持多种多样的二级缓存实现,Hibernate自己写的HashTableCatcheProvider只是用在测试里,真正的产品里不会用它,由其他的厂商来提供。

 

 

2)、EhCatcheProviderHibernate3.2默认的提供方式,支持范围为内存,硬盘等,如果内存放不下了,它会存到本地硬盘上,这样相对于远程数据库也是比较快的

 

3)、打开二级缓存

Ihibernate.cfg.xml的配置

 

 

II@Cache注解

 

 

4)、ehcache.xml配置

ehcache.xml真正指明了怎么设置二级缓存,而且可以写自己的缓存策略。

默认缓存策略

 

 

自定义缓存策略

 

 

 

5)、测试

 

 

配置好二级缓存,在不同的session里查询相同的sql语句就不再有第二次sql请求

注:Load()iterate()默认使用二级缓存;list()默认往二级缓存加数据,但查询的时候不使用;List将从数据库查出的数据放入缓存,因为每次查询条件不能保证一样,所以无法从缓存中查询;

List():

 

 

 

 

Iterate()

 

 

Result: 



  

 

 

3、  查询缓存

1)、概念:特殊的二级缓存,是指的重复查询的缓存,如果查询条件不一样,那就用不了缓存,没有相应的算法去实现;

2)、配置:

查询缓存是依赖于二级缓存的,所以首先要打开配置好二级缓存

 

 

3)、实例:

 

 

4)、测试:

发两条List请求,不会产生两条SQL语句,而且是可以在不同的session

 

 

四、总结

Hibernate查找对象如何应用缓存?

Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存;删除、更新、增加数据的时候,同时更新缓存。

Hibernate管理缓存实例

无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()update()saveOrUpdate()方法传递一个对象时,或使用load() get()list()iterate() scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。当随后flush()方法被调用时,对象的状态会和数据库取得同步。如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。

  • 大小: 19 KB
  • 大小: 16.7 KB
  • 大小: 26.2 KB
  • 大小: 26.7 KB
  • 大小: 44 KB
  • 大小: 20.2 KB
  • 大小: 33.3 KB
  • 大小: 11.8 KB
  • 大小: 24.4 KB
  • 大小: 55.3 KB
  • 大小: 23.2 KB
  • 大小: 22.6 KB
  • 大小: 33 KB
  • 大小: 10.2 KB
  • 大小: 21.9 KB
  • 大小: 23.3 KB
  • 大小: 13.2 KB
  • 大小: 13.2 KB
  • 大小: 47.6 KB
分享到:
评论

相关推荐

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

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

    Hibernate+中文文档

    3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of ...

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

    3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of ...

    深入浅出Hibernate.pdf

    从一个基础程序入手,讲述Hibernate的基本语法与配置,慢慢升高到缓存、延迟加载等高级特性。本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate...

    HibernateAPI中文版.chm

    3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of ...

    Hibernate实战(第2版 中文高清版)

     13.3.2 Hibernate高速缓存架构   13.4 高速缓存实践   13.4.1 选择并发控制策略   13.4.2 理解高速缓存区域   13.4.3 设置本地的高速缓存提供程序   13.4.4 设置重复的高速缓存   13.4.5 控制二级高速...

    hibernate 教程

    开始Hibernate之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式...

    Hibernate 中文 html 帮助文档

    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_3.2.0_符合Java习惯的关系数据库持久化

    3.5. Hibernate缓存属性 3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of ...

    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 参考文档

    1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. 架构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 3. 配置 3.1. 可编程的配置方式 ...

    详解Java的Hibernate框架中的缓存与原生SQL语句的使用

    主要介绍了Java的Hibernate框架中的缓存与原生SQL语句的使用,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下

    hibernate 体系结构与配置 参考文档(html)

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

    Hibernate教程

    Hibernate参考文档 目录 前言 1. 翻译说明 2. 版权声明 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第...

    EHCache缓存的说明和测试

    EHCache缓存的说明文档是到处找来的内容,都有参考链接指向原地址。有三个测试项目也在里面:一个整合了Struts2或Hibernate,一个整合了MyBatis3,这两个是我做的;另一个ehcachetest是下载了別人的。

    hibernate

    开始Hibernate之旅 1.2. 第一个可持久化类 1.3. 映射cat 1.4. 与猫同乐 1.5. 结语 2. 体系结构 2.1. 总览 2.2. JMX集成 2.3. JCA支持 3. SessionFactory配置 3.1. 可编程配置方式...

    Hibernate3+中文参考文档

    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. 事务策略配置 ...

    基于J2EE短信共享网站设计(Spring+Struts2+Hibernate)

    2.初始不了SessionFactory 可能是二级缓存初始化问题,去掉二级缓存即可(在hibernate.配置文件中)(没多大用) 3. hibernate配置文件和applicationContent中也要修改数据库用户名和密码 因为这个是网站,所以源...

    hibernate3.04中文文档.chm

    4.4.4. 二级缓存与查询缓存 4.4.5. 查询语言中的替换 4.4.6. Hibernate的统计(statistics)机制 4.5. 日志 4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略...

    Hibernate参考文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

Global site tag (gtag.js) - Google Analytics