Hibernate的一级缓存又称为Session缓存,其适用范围是在当前的会话之中,其生命周期和Session相同,随着Session的销毁,一级缓存也会随之销毁。一级缓存是不能取消的,Hibernate默认会采取一级缓存。
工作原理:通过Session冲数据库查询的实体会被存储在程序的内存当中,下次查询同一实体的时候不再从数据库中获取,而是直接从应用程序内存获取。
Hibernate一级缓存API:
evict()清除一级缓存的指定对象
clear()清除一级缓存的所有对象 query().list与query().iterator的区别:
query().list无法使用一级缓存。
query().iterator是查询主键id,使用query.iterator()会在执行完查找id的sql查询后,分别向数据库再次执行查询(缓存找不到id记录),如果前面使用了query.list()再调用query.iterator()则会在缓存中查找id并返回查询的值。
二级缓存开启步骤
1.导入相对应的ehcache.JAR包
2.导入ehcache.xml文件到src路径下
3.在 hibernate.cfg.xml中配置<property name="cache.provider_class">外部实现类</property>
4.在实体类的配置文件中(.hbm.xml) ,配置<cache usage="read-only"></cache>
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.二级缓存中的数据可适用方位是当前应用的所有会话,不会虽然某一个session会话的关闭而关闭,而是随着整个sessionFactory的关闭而关闭
3.二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件 二级缓存的适用场景:
1.很少被修改的数据
2.不是很重要的数据,允许出现偶尔并发的数据
3.不会被并发访问的数据
4.参考数据 一二级缓存的对比:
如图 http://www.imooc.com/video/9018
总结:
1.Hibernate的缓存能提高检索效率
2.Hibernate的缓存分为一级缓存和二级缓存,一级缓存是会话级缓存,二级缓存是应用级缓存
3.Hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以要注意缓存的使用策略。 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. 怎么用代码弹回 UITableView 中左滑出来的删除按钮

    点击取消,让删除按钮弹回去 [tableView setEditing:NO] 初学 ios 真是大菜鸟,这么简单的一个问题搞了 3 个小时

  2. ambari-server启动出现ERROR main] DBAccessorImpl:106 - Error while creating database accessor java.lang.ClassNotFoundException:com.mysql.jdbc.Driver问题解决办法(图文详解)

    不多说,直接上干货! 问题详情 ambari-server启动时,报如下的错误 问题分析 注:启动ambari访问前,请确保mysql驱动已经放置在/usr/share/Java内且名字是mysql- ...

  3. p2p的UDP打洞原理

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  4. Golang教程:方法

    什么是方法 一个方法只是一个函数,它有一个特殊的接收者(receiver)类型,该接收者放在 func 关键字和函数名之间.接收者可以是结构体类型或非结构体类型.可以在方法内部访问接收者. 通过下面的 ...

  5. js&&jQuery实现省市区三级联动

    代码参考了:https://codepen.io/anon/pen/WzyNQB;根据自己的需要修改了一下,挂个出处 1.前端页面代码 <html> <head> <me ...

  6. 兼容IE和Firefox获得keyBoardEvent对象

    <input type="text" name="words" id="search_txt" class="seachIp ...

  7. vue2.0中v-on绑定自定义事件的理解

    vue中父组件通过prop传递数据给子组件,而想要将子组件的数据传递给父组件,则可以通过自定义事件的绑定. 每个Vue实例都实现了[事件接口],即: 1.使用 $on(eventName) 监听事件 ...

  8. Linux-学习笔记(PHP向)<一>

    Linux常用命令 使用PHP服务器端脚本编程语言进行网站开发,需要在lamp环境下进行,Linux作为”四剑客”之一是有必要了解熟悉的,而Linux系统并不像windows操作系统那样,以图形化的界 ...

  9. 规范的web前端代码

    web前端的代码规范主要针对的是HTML,CSS和javaScript代码. 前端代码规范在不同场合会有差异,但是规范的前端代码应该具有以下特征: 1.符合标准 所谓的标准是指W3C指定的web标准, ...

  10. easyui grid 增加合计行

    一.首先,easyui  grid 的 showfooter 属性设置为 true $aplgrid.datagrid({ data: globalExpenseClaimForm.ExpenseCl ...