1. Hibernate的一级缓存又称为Session缓存,其适用范围是在当前的会话之中,其生命周期和Session相同,随着Session的销毁,一级缓存也会随之销毁。一级缓存是不能取消的,Hibernate默认会采取一级缓存。
  2. 工作原理:通过Session冲数据库查询的实体会被存储在程序的内存当中,下次查询同一实体的时候不再从数据库中获取,而是直接从应用程序内存获取。
  3. Hibernate一级缓存API
  4. evict()清除一级缓存的指定对象
  5. clear()清除一级缓存的所有对象
  6.  
  7. query().listquery().iterator的区别:
  8. query().list无法使用一级缓存。
  9. query().iterator是查询主键id,使用query.iterator()会在执行完查找idsql查询后,分别向数据库再次执行查询(缓存找不到id记录),如果前面使用了query.list()再调用query.iterator()则会在缓存中查找id并返回查询的值。
  1. 二级缓存开启步骤
  2. 1.导入相对应的ehcache.JAR
  3. 2.导入ehcache.xml文件到src路径下
  4. 3. hibernate.cfg.xml中配置<property name="cache.provider_class">外部实现类</property>
  5. 4.在实体类的配置文件中(.hbm.xml ,配置<cache usage="read-only"></cache>
  6. usage:表示事务模式 region:可以为指定region属性名的所有表进行统一缓存策略配置

二级缓存的并发访问策略

•两个并发的事务同时访问持久层的缓存的相同数据时,也有可能出现各类并发问题.
•二级缓存可以设定以下 4 种类型的并发访问策略,每一种访问策略对应一种事务隔离级别
    –非严格读写(Nonstrict-read-write):不保证缓存与数据库中数据的一致性.提供ReadUncommited事务隔离级别,对于极少被修改,而且允许脏读的数据,可以采用这种策略
    –读写型(Read-write):提供ReadCommited数据隔离级别.对于经常读但是很少被修改的数据,可以采用这种隔离类型,因为它可以防止脏读
    –事务型(Transactional):仅在受管理环境下适用.它提供了RepeatableRead事务隔离级别.对于经常读但是很少被修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读
    –只读型(Read-Only):提供Serializable数据隔离级别,对于从来不会被修改的数据,可以采用这种访问策略

管理 Hibernate的二级缓存

•Hibernate的二级缓存是进程或集群范围内的缓存
•二级缓存是可配置的的插件,Hibernate允许选用以下类型的缓存插件:
    –EHCache: 可作为进程范围内的缓存,存放数据的物理介质可以使内存或硬盘,对Hibernate的查询缓存提供了支持
    –OpenSymphonyOSCache:可作为进程范围内的缓存,存放数据的物理介质可以使内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持
    –SwarmCache: 可作为集群范围内的缓存,但不支持Hibernate的查询缓存
    –JBossCache:可作为集群范围内的缓存,支持Hibernate的查询缓存
  1.  
  2. 二级缓存的介绍:
  3. 1.二级缓存又称为“全局缓存”,“应用级缓存”
  4. 2.二级缓存中的数据可适用方位是当前应用的所有会话,不会虽然某一个session会话的关闭而关闭,而是随着整个sessionFactory的关闭而关闭
  5. 3.二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件
  6.  
  7. 二级缓存的适用场景:
  8. 1.很少被修改的数据
  9. 2.不是很重要的数据,允许出现偶尔并发的数据
  10. 3.不会被并发访问的数据
  11. 4.参考数据
  12.  
  13. 一二级缓存的对比:
  14. 如图 http://www.imooc.com/video/9018
  1. 总结:
  2. 1.Hibernate的缓存能提高检索效率
  3. 2.Hibernate的缓存分为一级缓存和二级缓存,一级缓存是会话级缓存,二级缓存是应用级缓存
  4. 3.Hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以要注意缓存的使用策略。
  5.  
  6. http://blog.csdn.net/ochangwen/article/details/52601527

Hibernate缓存策略的更多相关文章

  1. Hibernate学习笔记二:Hibernate缓存策略详解

    一:为什么使用Hibernate缓存: Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序访问物理数据库的频次,从而提高应用程序的性能. 缓存内的数据是对物理数据源的复制,应用 ...

  2. Hibernate缓存策略(一级缓存和EHcache二级缓存)

    如何配置二级缓存: 第一步:导入EHcache依赖 1)Maven项目: <!--此处使用hibernate4--> <dependency> <groupId>o ...

  3. Hibernate:Hibernate缓存策略详解

    一:为什么使用Hibernate缓存: Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序访问物理数据库的频次,从而提高应用程序的性能. 缓存内的数据是对物理数据源的复制,应用 ...

  4. Hibernate缓存原理与策略

    Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...

  5. [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. Hibernate缓存原理与策略 Hibernate缓存原理:

    Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...

  7. Hibernate(四)——缓存策略+lazy

    Hibernate作为和数据库数据打交道的框架,自然会设计到操作数据的效率问题,而对于一些频繁操作的数据,缓存策略就是提高其性能一种重要手段,而Hibernate框架是支持缓存的,而且支持一级和二级两 ...

  8. Hibernate第十二篇【二级缓存介绍、缓存策略、查询缓存、集合缓存】

    Hibernate二级缓存介绍 前面我们已经讲解过了一级缓存,一级缓存也就是Session缓存,只在Session的范围内有效-作用时间就在Session的作用域中,范围比较小 Hibernate为我 ...

  9. Hibernate的二级缓存策略

    Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次 ...

随机推荐

  1. 2019美国大学生数学建模竞赛B题(思路)

    建模比赛已经过去三天了,但留校的十多天里,自己的收获与感受依然长存于心.下面的大致流程,很多并没有细化,下面很多情况都是在假设下进行的,比如假设飞机能够来回运送药品,运货无人机就只运货,在最大视距下侦 ...

  2. Jedis连接redis

    今天与大家分享下,Jedis连接池使用.先看一段JAVA 代码:         JedisPoolConfig config = new JedisPoolConfig();         con ...

  3. html的列表

    1.无序列表(最常用) 先看个例子:如下图: 使用的 html标签为  <ul>   <!--ul是UnorderList的缩写,意为无序列表:li是ListItem的缩写,列表项- ...

  4. 阿里云 maven 地址

    http://maven.aliyun.com/nexus/content/groups/public/ 阿里云的 maven 地址

  5. Linux 上安装Docker 并部署netcor2.1

    述 容器,顾名思义是用来存放并容纳东西的器皿: 而容器技术伴着Docker的兴起也渐渐的映入大家的眼帘,它是一个抽象的概念,同时也是默默存在世上多年的技术,不仅能使应用程序间完全的隔离,而且还能在共享 ...

  6. SSRS Report Knowledge Base

    1. 获取Textbox的值,根据Textbox值更改单元格颜色 Textbox值:=ReportItems!Textbox1.Value 当前单元格的值:=Me.Value =IIF(ReportI ...

  7. c# winfrom 页面的enter变为tab 功能使用 在特定的按钮里面如何继续当enter使用求大神帮忙解答一下 !!急

    enter 当tab  键用 已经实现  :例如按回车的时候切换一直走 ,走到一个按钮如何让回车键在这个按钮的时候还是执行enter按钮的功能而不是tab   求大神解答一下, 目前页面tab功能改为 ...

  8. C#项目””是针对”.NETFramework,Version=v4.5.2”但此计算机没有,需要修改为v4.5.1.

    每次下载别人的代码都会出现这样的问题,以为是没有安装.NETFramework,就下载安装了,但是每次安装都会出现已安装高版本的4.6(Win10自带),无需下次安装,但是每次VS中都会显示有问题,而 ...

  9. Java基础(9)——数组

    难点儿的已经过去啦,现在又开始基础了哈~ 之前讲变量的时候,变量是一个个的呀~,那我要搞一串变量该啷个办呢?Java给我们出了个好东西叫数组(*^▽^*) 数组呢,就是将变量一组一组的存起来,这个也是 ...

  10. Python基础学习总结(二)

    2.列表简介 Python有内置的一种数据类型列表:list. list是一种有序的集合. 列表由一系列按特定顺序排列的元素组合.用方括号 [ ] 来表示. list里面的元素的数据类型可以不同,比如 ...