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

    一、Hibernate缓存策略概述

    什么是缓存?

      缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略

    为什么使用缓存?

      ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和优化ORM框架的执行效率至关重要

      Hibernate的缓存是提升和优化Hibernate执行效率的重要手段,所以学会Hibernate缓存的使用和配置是优化的关键

       

    二、Hibernate缓存策略——不使用缓存的问题

      观察如图代码IO,发现了什么?

      1.Hibernate缓存与session相关,同一个session第二次访问同一个对象将使用缓存。

      2.在不同的session中多次查询同一个对象时,会执行多次数据库查询。

      3.在一级缓存当中,持久化类的每个实例都具有唯一的OID,也就是说同一个session两次查一个对象时,第二次是不会再将对象保存在缓存当中的。

      

    三、一级缓存介绍

    介绍Hibernate一级缓存:

      1.Hibernate一级缓存又称为"Session缓存","会话级缓存"

      2.通过Session从数据库查询实体时把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而是从内存中获取,这就是缓存

      3.一级缓存的生命周期和Session相同;Session销毁,他也销毁

      4.一级缓存中的数据可适用范围在当前会话之内

    Hibernate一级缓存的API

      1.一级缓存无法取消,Hibernate默认使用一级缓存

      2.用两个方法管理一级缓存:

        a.evict():用于将某个对象从Session的一级缓存中清除

        b.clear():用于将一级缓存中的所有对象全部清除

      3.一级缓存也有些时候会对程序的性能产生影响,因为在对数据库进行增删改的时候同时也要更新缓存

     

    一级缓存注意问题:

      1.query.list()是不会使用一级缓存的

      2.query.iterate()会使用一级缓存,当缓存中有数据的时候,query.iterate()将所有对象的id查询出来然后到缓存中将所有对象都查询出来,如果缓存中没有数据,query.iterate()则把对象从数据库中一条一条的将数据查出来

    四、二级缓存应用

    二级缓存的配置步骤:

      1、添加二级缓存对应的jar包(commons-logging-1.1.3.jar ;  ehcache.jar.zip)

      2、在Hibernate的配置文件中添加Provider类的描述

      3、添加二级缓存的属性配置文件(ehcache.xml)

      4、在需要被缓存的表所对应的映射文件中添加<cache/>标签 

    region="Employee(自定义命名)":

      在ehcache.xml文件中自定义配置:

        maxElementsInMemory="10000" 表示缓存中允许创建的最大对象数。

        eternal="false" 表示缓存中对象是否为永久的。

        timeToIdleSeconds="120" 表示缓存数据钝化时间(即对象在它过期前的空闲时间)。

        timeToLiveSeconds="120" 表示缓存数据生存时间(即对象在它过期前的生存时间)。

        overflowToDisk="true" 表示溢出之后是否存储在硬盘上。

    Hibernate4以后的配置:

      <!-- 配置二级缓存 -->

      <property name="hibernate.cache.use_second_level_cache">true</property>

      <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

    五、一二级缓存对比及总结

    二级缓存的介绍

      二级缓存又称为“全局缓存”、“应用级缓存”

      二级缓存中的数据可适用范围是当前应用中的所有会话

      二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件如:Hashtable、OSCache、SwarmCache、JBoss TreeCache等

    通常会将一下特征的数据放入到二级缓存中

      很少被修改的数据

      不是很重要的数据,允许偶尔并发的数据

      不会被并发访问的数据

      参考数据

      

    总结:

      1、Hibernate的缓存能提高检索效率

      2、Hibernate的缓存分为一级缓存和二级缓存。一级缓存是会话级缓存,二级缓存是应用级缓存

      3、Hibernate的缓存在提高检索的同时,也会增加服务器的消耗,所以要注意缓存的使用策略

  • 相关阅读:
    关于JS事件冒泡与JS事件代理(事件委托)
    异步、同步和阻塞、非阻塞
    大数据高并发
    前段clam安装
    JavaScript动态修改CSS
    键盘按键js效果
    键盘键值表总结
    移动端不可缩放
    JS基本语法
    计算几何——ICPC Latin American Regional Contests 2019 B
  • 原文地址:https://www.cnblogs.com/silence-maple/p/10069242.html
Copyright © 2011-2022 走看看