详解Hibernate缓存与性能优化-创新互联

创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!

创新互联专业为企业提供钟山网站建设、钟山做网站、钟山网站设计、钟山网站制作等企业网站建设、网页设计与制作、钟山企业网站模板建站服务,十年钟山做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

缓存概念

缓存 介于应用程序和永久性数据源(文件,数据库等)之间,作用就是降低应用程序直接读取数据源的频率,从而提高应用程序的运行性能。缓存中的数据就是数据源中数据的复制,应用程序在运行时直接读取缓存中的数据。

缓存的物理介质通常是内存,而永久性数据存储源的物理介质通常是硬盘或磁盘,应用程序读写内存的速度显然比读写硬盘的速度快。如果缓存存放的数据非常大,也会用硬盘作为缓存的物理介质。

Hibernate缓存分类

在hibernate中提供了二种缓存机制:一级缓存、二级缓存,因为二级缓存策略是针对于ID查询的缓存策略,对于条件查询则毫无作用,为此,Hibernate提供了针对条件查询的Query Cache(查询缓存)

1、一级缓存。session缓存就是一级缓存。由于session对象的生命周期通常对应一个数据库事物,因此他的缓存范围是事物范围的缓存。一级缓存是必需的,在一级缓存中,持久化类的每个实例都具有唯一的OID;

2、二级缓存。sessionFactory分为内置缓存和外置缓存。

     内置缓存是hibernate自带的,不可拆卸,是只读缓存,用来存放映射元数据和预定义SQL语句。

     外置缓存是一个可配置的缓存插件,默认sessionFactory不会启用这个缓存插件,外置缓存中的数据就是数据库数据的复制。SessionFactory的外置缓存称为hibernate的二级缓存

     二级缓存由sessionFactory负责管理,SessionFactory的生命周期和应用程序的整个进程对应。二级缓存是可选的,可以在每个类或者每个集合的粒度上配置

3、查询缓存 它是Hibernate为查询结果提供的,依赖于二级缓存。

缓存的作用范围

  1. 事物范围 每个事物都有自己的缓存,缓存内数据不会被多个事物并发访问。例如,Hibernate的一级缓存,事物是不能跨多个Session的,Session内数据只能被当前事物访问,因此它属于事物范围内的缓存。
  2. 进程范围 进程内的所有事物共享缓存,进程结束,缓存结束生命周期。例如,Hibernate的二级缓存,SessionFactory对象的生命周期对应应用程序的整个进程,因此它属于进程范围的缓存。
  3. 集群范围 缓存被一个或多个机器上的进程共享。hibernate的二级缓存也可以作为集群范围的缓存。

Hibernate 一级缓存

Session内的缓存即一级缓存。位于缓存中的对象称为持久化对象,它和数据库中的相关记录对应。Session能够在某些时间点(session.flush(); ,tx.commit(); ),按照缓存中对象的变化来执行相关的SQL语句,从而同步更新数据库,这一过程称为刷新缓存。

当应用程序调用 session的 ‘save() ,update() ,saveOrUpdate() ,load() ,get()'等方法,以及调用Query查询接口的' getResultList()'时,如果在'Session'缓存中还不存在相应的对象,Hibernate就会把该对象加入到缓存中,在刷新缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。

综上所述,Session缓存有两大作用:

  1. 减少访问数据库的频率
  2. 保证数据库中的相关记录和缓存中的相应对象同步

session缓存管理方法

  1. evict(); 从session缓存中清除某个对象
  2. clear(); 清空session缓存

ps: flush()强制进行从缓存到数据库的同步

Hibernate 二级缓存

二级缓存是进程或集群范围内的缓存,可以被所有的Session共享,其生命周期和SessionFactory一样。

二级缓存是可配置的插件,Hibernate打包了一些开源缓存实现,提供对他们的内置支持

缓存插件 缓存实现类 查询缓存
EHCache org.hibernate.cache.EhCacheProvider 支持
OSCache org.hibernate.cache.OSCacheProvider 支持
SwarmCache org.hibernate.cache.SwarmCacheProvider 不支持
JBossCache org.hibernate.cache.TreeCacheProvider 支持

为了把上边的缓存插件集成到Hibernate中,Hibernate提供了CacheProvider接口,它是缓存插件与Hibernate之间的适配器。

表格中的实现类是CacheProvider接口的不同实现。

配置二级缓存的步骤如下:

  1. 选择合适的缓存插件,配置其自带的配置文件
  2. 选择需要使用二级缓存的持久化类,设置它的二级缓存的并发访问策略。

以EHCache配置为例,步骤如下

1、将ehcache.xml文件添加到类路径下

     在路径'hibernate-release-5.2.6.Final\project\etc\'下复制'ehcache.xml'

     标签为每个需要二级缓存的类和集合设定缓存的数据过期策略,配置如下

<cache name="sampleCache1"  -- 缓存的名称,取值为类的完整名称或类的集合名称
 maxElementsInMemory="10000" -- 基于缓存可存放的对象的大数目
 eternal="false"   -- 如果为true,表示对象永不过期,默认为false 
 timeToIdleSeconds="300"  -- 设置允许对象处于空闲状态的最长时间,单位是秒
 timeToLiveSeconds="600"  -- 设置对象允许存在于缓存中最长时间,单位是秒
 overflowToDisk="true"  -- 是否将溢出的对象写到基于硬盘的缓存中
 />

本文标题:详解Hibernate缓存与性能优化-创新互联
当前URL:https://www.cdcxhl.com/article14/dshide.html

成都网站建设公司_创新互联,为您提供静态网站品牌网站建设网站策划手机网站建设服务器托管Google

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都app开发公司