zoukankan      html  css  js  c++  java
  • Hibernate缓存策略

    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
  • 相关阅读:
    【学术篇】SDOI2017 数字表格
    【学术篇】分析矿洞 杜教筛
    【学术篇】bzoj3262 陌上花开. cdq分治入门
    ubuntu搭建git服务器
    windows中操作文件和目录的函数
    php的单例模式
    linux挂载新硬盘
    改造vim
    关于在mfc中cstring转为float和ini
    windows自带的线程池
  • 原文地址:https://www.cnblogs.com/aoyihuashao/p/7877667.html
Copyright © 2011-2022 走看看