首页 > 其他分享 >Hibernate4之二级缓存配置

Hibernate4之二级缓存配置

时间:2023-05-07 22:02:40浏览次数:48  
标签:Hibernate4 缓存 配置 SessionFactory cache 二级缓存 hibernate 数据



缓存:缓存是什么,解决什么问题? 


位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache。缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更快。 



缓存的范围分为3类: 


1.事务范围(单Session即一级缓存) 


 

  事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围. 

2.应用范围(单SessionFactory即二级缓存) 


 

  应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存或硬盘作为存储介质,二级缓存就属于应用范围. 

3.集群范围(多SessionFactory) 


 

  在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式.


二级缓存如何工作的 


Hibernate的二级缓存同一级缓存一样,也是针对对象ID来进行缓存。所以说,二级缓存的作用范围是针对根据ID获得对象的查询。 


● 在执行各种条件查询时,如果所获得的结果集为实体对象的集合,那么就会把所有的数据对象根据ID放入到二级缓存中。 


● 当Hibernate根据ID访问数据对象的时候,首先会从Session一级缓存中查找,如果查不到并且配置了二级缓存,那么会从二级缓存中查找,如果还查不到,就会查询数据库,把结果按照ID放入到缓存中。 


● 删除、更新、增加数据的时候,同时更新缓存。 



与Hibernate一级缓存Session范围相对的是SessionFactory范围的二级缓存,SessionFactory也提供了相应的缓存机制。

SessionFactory缓存可以依据功能和目的的不同而划分为内置缓存和外置缓存。 


SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的副本,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来的。SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。 



SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件。外置缓存的数据是数据库数据的副本,外置缓存的介质可以是内存或者硬盘。SessionFactory的外置缓存也被称为Hibernate的二级缓存。 



Hibernate的二级缓存的实现原理与一级缓存是一样的,也是通过以ID为key的Map来实现对对象的缓存。 



二级缓存是缓存实体对象的,由于Hibernate的二级缓存是作用在SessionFactory范围内的,因而它比一级缓存的范围更广,可以被所有的Session对象所共享。 



在通常情况下会将具有以下特征的数据放入到二级缓存中: 


● 很少被修改的数据。 


● 不是很重要的数据,允许出现偶尔并发的数据。 


● 不会被并发访问的数据。 


● 常量数据。 


● 不会被第三方修改的数据 



而对于具有以下特征的数据则不适合放在二级缓存中: 


● 经常被修改的数据。 


● 财务数据,绝对不允许出现并发。 


● 与其他应用共享的数据。 



在这里特别要注意的是对放入缓存中的数据不能有第三方的应用对数据进行更改(其中也包括在自己程序中使用其他方式进行数据的修改,例如,JDBC),因为那样Hibernate将不会知道数据已经被修改,也就无法保证缓存中的数据与数据库中数据的一致性。 



常见的缓存组件 


在默认情况下,Hibernate会使用EHCache作为二级缓存组件。但是,可以通过设置hibernate.cache.provider_class属性,指定其他的缓存策略,该缓存策略必须实现org.hibernate.cache.CacheProvider接口。 


通过实现org.hibernate.cache.CacheProvider接口可以提供对不同二级缓存组件的支持,此接口充当缓存插件与Hibernate之间的适配器。 


组件

Provider类

类型

集群

查询缓存

Hashtable

org.hibernate.cache.HashtableCacheProvider

内存

不支持

支持

EHCache

org.hibernate.cache.EhCacheProvider

内存,硬盘

不支持

支持

OSCache

org.hibernate.cache.OSCacheProvider

内存,硬盘

支持

支持

SwarmCache

org.hibernate.cache.SwarmCacheProvider

集群

支持

不支持

JBoss TreeCache

org.hibernate.cache.TreeCacheProvider

集群

支持

支持


Hibernate已经不再提供对JCS(Java Caching System)组件的支持了。 


集群缓存的概念: 


当一台服务器上的执行了update方法修改了一条数据,那么只有这一台服务器上的二级缓存会同步于数据库,其他服务器上的二级缓存里面这条数据就没意义了。这个时候用OSCache缓存机制,只要有一台服务器上有数据修改了,马上会从配置文件中找到配置好的其他服务器IP地址,进行广播,告诉他们我这条数据修改了,你们也更新同步一下。(是不是有点像手机上微博的推送功能) 



如何在程序里使用二级缓存: 


首先在hibernate.cfg.xml开启二级缓存 


 

Hibernate4之二级缓存配置_缓存

1. <</span>hibernate-configuration>  
2.   <</span>session-factory>  
3.  
4.      ......  
5.  
6.         
7.      <</span>property name="hibernate.cache.use_second_level_cache">true</</span>property>  
8.         
9.      <</span>property name="hibernate.cache.use_query_cache">true</</span>property>  
10.         
11.        
12.         
13.         
14.      <</span>property name="hibernate.cache.region.factory_class">  
15.         net.sf.ehcache.hibernate.EhCacheRegionFactory  
16.      </</span>property>  
17.         
18.         
19.        
20.      <</span>property name="hibernate.cache.use_structured_entries">true</</span>property>  
21.  
22.         
23.      <</span>property name="hibernate.generate_statistics">true</</span>property>  
24.  
25.      ......  
26.  
27.   </</span>session-factory>  
28. </</span>hibernate-configuration>



然后是ehcache配置(ehcache.xml) 


cache参数详解: 


● name:指定区域名 


● maxElementsInMemory :缓存在内存中的最大数目 


● maxElementsOnDisk:缓存在磁盘上的最大数目 


● eternal :设置是否永远不过期 


● overflowToDisk : 硬盘溢出数目 


● timeToIdleSeconds :对象处于空闲状态的最多秒数后销毁 


● timeToLiveSeconds :对象处于缓存状态的最多秒数后销毁 


● memoryStoreEvictionPolic

y:缓存算法,有LRU(默认)、LFU、LFU 


关于缓存算法,常见有三种: 


● LRU:(Least Rencently Used)新来的对象替换掉使用时间算最近很少使用的对象 


● LFU:(Least Frequently Used)替换掉按命中率高低算比较低的对象 


● LFU:(First In First Out)把最早进入二级缓存的对象替换掉 




 

Hibernate4之二级缓存配置_缓存



标签:Hibernate4,缓存,配置,SessionFactory,cache,二级缓存,hibernate,数据
From: https://blog.51cto.com/u_548275/6252618

相关文章

  • 12 KVM虚拟机配置-配置虚拟设备(网络设备)
    12KVM虚拟机配置-配置虚拟设备(网络设备)12.1概述XML配置文件可以配置虚拟网络设备,包括ethernet模式、bridge模式、vhostuser模式等,本节介绍虚拟网卡设备的配置方法。12.2元素介绍XML配置文件中使用元素“interface”,其属性“type”表示虚拟网卡的模式,可选的值有“ethernet......
  • 入门6-Pytest全局配置文件
    通过全局配置pytest.ini文件执行()//会自动加载此文件注意:一般放在项目根目录下,并且名字必须为pytest.ini编码格式为ANSI,有中文需要GBS1218pytest.ini可以改变默认测试用例规则不管main还是命令方式都会自动加载此配置文件内容举例:[pytest]//代表配置文件Addopts==“-......
  • 遇到的问题:nacos配置管理,无法获取到nacos中的配置内容
    nacos中的配置: bootstrap.yml文件:    1spring:2application:3name:userservice4profiles:5active:dev#环境6cloud:7nacos:8server-addr:localhost:8848#nacos地址9config:10file-extensio......
  • Java Bean介绍与配置
    (一)JavaBean介绍1.javaBean的介绍在Java中,有很多class的定义都符合这样的规范:若干private实例字段;通过public方法来读写实例字段。例如:publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnthis.name;}p......
  • DVWA配置详解
    1.首先把dvwa文件夹放在小皮面板的www目录下之后打开c:\phpstudy-pro\www\DVWA-master\config之后把config.inc.php.dist重命名为config.inc.php如以下图片,2.之后进去修改一下mysql数据库的密码,为root因为系统默认密码就是root3.在之后去phpstudy_pro目录下的extensions目录下......
  • Tomcat 配置SSL证书
    1.将证书放到tomcat或tomcat子目录下(如tomcat/conf等)2.修改tomcat/conf下的server.xml文件找到如下注释下的配置并修改:<!--DefineaSSLHTTP/1.1Connectoronport8443ThisconnectorusestheJSSEconfiguration,whenusingAPR,theconnectorsho......
  • ssi整合时的配置文件的核心代码
    以下是为科协备课时做的ssi例子中配置文件的摘要1、beans.xml<beanid="userAction"class="com.njupt.action.UserAction"scope="prototype"><propertyname="service"ref="userService"></property></bean>2、we......
  • LDAP备份迁移和LDAP主从配置,阿里云服务器做主,内网机做从,zabbix,gilab,jumpserver接入lda
    一,LDAP备份迁移1,原服务器上导出备份文件mkdir/opt/ldap/usr/sbin/slapcat>/opt/ldap/ldapdbak.ldif2,目标服务器搭建ldap环境yuminstallopenldapopenldap-clientsopenldap-serversserviceslapdstartsystemctlenableslapdslappasswd-h{SSHA}-sxxxxx #生成管理......
  • vim+YouCompleteMe中设置回车自动选择第一项配置
    配置在vimrc中添加如下配置inoremap<expr><CR>pumvisible()?"<Down>\<CR>":"\<CR>"解释inoremap在输入(i)的模式下,非递归(nore[cursive])做符号映射(map)。若当前为pumvisible模式,将回车映射为“down键盘加回车再加空格”,down键即选择下一项,最后有一个空格是为了退出候......
  • git 配置远程仓库
    本文是为了使用git拉取和推送时,能够免密同步远程服务器ps:首先要有一台远程服务器其次是远程服务器和本地,都安装了git生成密钥ssh-keygen参数说明使用ssh-keygen生成密钥,几个主要使用的参数-t指定加密算法-C指定密钥注释(相当于对密钥添加一个名字)-f指定要......