zoukankan      html  css  js  c++  java
  • 十四、HIbernate缓存

    一、一级缓存

      简单来说,同一个session中,你重复去获取同一个对象,如果Hibernate,每次都发出sql语句去查,太麻烦了,于是它每次先去一级缓存中查,如果没有就发出sql语句去数据库中查,同时把查到的对象保存在一级缓存中。下次要用的时候,还是先去一级缓存中查,查到了,就不用再去数据库中查了。

      值得注意的是,一级缓存也叫session级缓存,同一个session是共享一个一级缓存的,当session关闭的时候,这个session里面的缓存也就清空了。

      一级缓存,Session级共享。 save,update,saveOrUpdate,load,get,list,iterate,lock这些方法都会将对象放在一级缓存中,一级缓存不能控制缓存的数量,所以要注意大批量操作数据时可能造成内存溢出;可以用evict,clear方法清除缓存中的内容。

    二、二级缓存

      一级缓存是默认存在的,二级缓存是默认不存在的

      要使用二级缓存必须要配置使用,配置好之后,Hibernate查询对象先去一级缓存中查,如果查不到再去二级缓存中查,如果再查不到再发出sql语句去数据库中查,同时将查询到的对象放入二级缓存中

      值得注意的是,二级缓存也叫sessionFactory级缓存,同一个sessionFactory是共享同一个sessionFactory的,当sessionFactory关闭的时候,这个sessionFactory里面的缓存也就清空了。

      二级缓存,sessionFactory级共享,是交给第三方去处理的。 

      配置方式(举例配置OSCache)

    1.引入jar包 链接:https://pan.baidu.com/s/1qYZaozy 密码:wjfn

    2.配置hibernate.cfg.xml

    <property name="cache.use_second_level_cache">true</property><!-- 启用二级缓存 -->
    <property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property><!-- 配置适配器类 -->

    3.配置要对哪个domain对象配置二级缓存

      3.1方法一,在hibernate.cfg.xml中配置

    <class-cache usage="read-only" class="com.myz.domain.Employee"/>

      3.2方法二,在Employee.hbm.xml中配置

    <hibernate-mapping package="com.myz.domain">
        <class name="Employee">
        <cache usage="read-only"/>
            <id name="id">
            <generator class="assigned"></generator>
            </id>
            
            <property name="name">
                <column name="name"></column>
            </property>
            
            <many-to-one name="dep" column="dep_id"></many-to-one>
        </class>
    </hibernate-mapping>

      3.3

      hibernate二级缓存策略

      ■ 只读缓存(read-only)

      ■ 读写缓存(read-write) [ 银行,财务软件]

      ■ 不严格读写缓存(nonstrict-read-write) [bbs 被浏览多少次]

      ■ 事务缓存(transactional)

      4.拷贝一个oscache.propertis配置文件,hibernate-3.2etcoscache.propertis目录下,

      5.统计信息打开generate_statistics,用sessionFactory.getSatistics()获取统计信息。

    <property name="hibernate.generate_statistics">true</property>
  • 相关阅读:
    Java内存管理以及各个内存区域详解
    python数据的存储和持久化操作
    Redis的安装及配置
    POI使用详解
    遍历Map的几种方法
    Quartz的cronTrigger表达式
    Java对XML文档的增删改查
    Solr系列二:Solr与mmseg4j的整合
    cms STW 的两个阶段
    GROUP BY 和 ORDER BY 同时使用问题
  • 原文地址:https://www.cnblogs.com/myz666/p/8447974.html
Copyright © 2011-2022 走看看