首页 > 其他分享 >Hibernate ehcache配置二级缓…

Hibernate ehcache配置二级缓…

时间:2023-04-30 11:31:45浏览次数:39  
标签:ehcache 二级 事务 Hibernate 并发 二级缓存 缓存 数据


  1. Cache简介:  
  2. )是计算机领域非常通用的概念。它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。缓存中的数据是数据存储源中数据的拷贝,应用程序在运行时直接读写缓存中的数据,只在某些特定时刻按照缓存中的数据来同步更新数据存储源。  
  3.  
  4.  
  5. 1.1.    持久化层的缓存的范围  
  6.  
  7. 1) 事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,当事务结束时,缓存也就结束生命周期。在此范围下,缓存的介质是内存。事务可以是数据库事务或者应用事务,每个事务都有独自的缓存,缓存内的数据通常采用相互关联的对象形式。  
  8. 2) 进程范围:缓存被进程内的所有事务共享。这些事务有可能是并发访问缓存,因此必须对缓存采取必要的事务隔离机制。缓存的生命周期依赖于进程的生命周期,进程结束时,缓存也就结束了生命周期。进程范围的缓存可能会存放大量的数据,所以存放的介质可以是内存或硬盘。缓存内的数据既可以是相互关联的对象形式也可以是对象的松散数据形式。松散的对象数据形式有点类似于对象的序列化数据,但是对象分解为松散的算法比对象序列化的算法要求更快。  
  9. 3) 集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致性,缓存中的数据通常采用对象的松散数据形式。  
  10.  
  11.   
  12.  
  13. 1.2.    持久化层的缓存的并发访问策略  
  14.  
  15.  
  16. 1) 事务型(Transactional)策略:仅仅在受管理环境中适用。它提供了Repeatable Read事务隔离级别。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发问题。  
  17. 2) 读写型(read-write)策略:提供了Read Committed事务隔离级别。仅仅在非集群的环境中适用。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。  
  18. 3) 非严格读写型(nonstrict-read-write)策略:不保证缓存与数据库中数据的一致性。如果存在两个事务同时访问缓存中相同数据的可能,必须为该数据配置一个很短的数据过期时间,从而尽量避免脏读。对于极少被修改,并且允许偶尔脏读的数据,可以采用这种并发访问策略。  
  19. 4) 只读型策略(read-only):对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。  
  20.  
  21. 2.    Hibernate中的缓存:  
  22.  
  23.  
  24. 2.1.    一级缓存和二级缓存的比较:  
  25.   
  26. 第一级缓存  
  27. 第二级缓存  
  28. 存放数据的形式  
  29. 相互关联的持久化对象  
  30. 对象的散装数据  
  31. 缓存的范围  
  32. 事务范围,每个事务都有单独的第一级缓存  
  33.  
  34. 并发访问策略  
  35.  
  36.  
  37. 数据过期策略  
  38.  
  39.  
  40. 物理存储介质  
  41. 内存  
  42.  
  43. 缓存的软件实现  
  44.  
  45.  
  46. 启用缓存的方式  
  47. API,直接通过JDBC API来执行指操作。  
  48.  
  49. 用户管理缓存的方式  
  50.  
  51.  
  52.   
  53. 2.2.    一级缓存的管理:  
  54.  
  55.  
  56. obj):从缓存中清除参数指定的持久化对象。  
  57.  
  58. 2.3.    二级缓存的管理:  
  59. 2.3.1.      Hibernate的二级缓存策略的一般过程如下:  
  60. 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。  
  61. 2) 把获得的所有数据对象根据ID放入到第二级缓存中。  
  62. 3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。  
  63. 4) 删除、更新、增加数据的时候,同时更新缓存。  
  64. Cache。  
  65. 2.3.2.      什么样的数据适合存放到第二级缓存中?  
  66. 1 很少被修改的数据  
  67. 2 不是很重要的数据,允许出现偶尔并发的数据  
  68. 3 不会被并发访问的数据  
  69. 4 参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。  
  70. 2.3.3.      不适合存放到第二级缓存的数据?  
  71. 1 经常被修改的数据  
  72. 2 财务数据,绝对不允许出现并发  
  73. 3 与其他应用共享的数据。  
  74.   
  75. 2.3.4.      常用的缓存插件  
  76. 的二级缓存是一个插件,下面是几种常用的缓存插件:  
  77. EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持。  
  78. OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。  
  79. SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。  
  80. JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。  
  81.   
  82. 2.3.5.      配置二级缓存的主要步骤:  
  83. 1)      选择需要使用二级缓存的持久化类,设置它的命名缓存的并发访问策略。这是最值得认真考虑的步骤。  
  84. 2)      选择合适的缓存插件,然后编辑该插件的配置文件。  
  85. 2.4.    使用EhCache配置二级缓存:  
  86. 2.4.1.      配置准备:  
  87. 1)      把hibernate-ehcache-*.jar加入到当前应用的classpath中。  
1. 2)      在applicationContext.xml文件中加入EhCache缓存插件的提供类。  
2. "sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
3.      ……  
4.      "hibernateProperties">  
5.           
6.            ……  
7.                 
8.            "hibernate.cache.use_query_cache">true  
9.                  
10.            "hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider  
11.                 
12.            "hibernate.cache.provider_configuration_file_resource_path">/ehcache/ehcache-hibernate-local.xml  
13.           
14.          
15.      ……  
16.     
17. 3)      挎贝ehcache.xml文件到类路径(项目工程的src/ehcache目录下)。  
18. 2.4.2.      配置步骤:  
19. Hibernate允许在类和集合的粒度上设置第二级缓存。在映射文件中,<<span class="keyword">class>和元素都有一个子元素,这个子元素用来配置二级缓存。  
20. 1)      采用注解的方式修改要配置缓存的那个持久化类如code.java  
21. @Entity  
22. @Table(name = "sys_code")  
23. @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)  
24. public class Code extends IdEntity  
25. 2)      编辑ehcache.xml文件:

标签:ehcache,二级,事务,Hibernate,并发,二级缓存,缓存,数据
From: https://blog.51cto.com/u_548275/6237833

相关文章

  • EHCache spring
    EHCachespring  import:importorg.springframework.cache.annotation.Cacheable;  注解(我放在service方法上,注意这个注解,如果用SPRING的Cacheable,就跟这一样;如果用GOOGLE的,这几个配置及import都得一致):@Cacheable(value="baseCache",key="'myid_'+#date")publicString......
  • Hibernate查询返回自定义对象
    /***Convertqueryresulttovolistutilclass.*/classAliasToBeanResultTransformerimplementsResultTransformer{privatestaticfinallongserialVersionUID=-5199190581393587893L;privatefinalClass<T>resultCla......
  • jpa入门(使用hibernate)
    新建工程,加入jar包,如图:User:packagecom.jpa;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;importjavax.persistence.SequenceGenerat......
  • Hibernate 一对一
    配置单向一对一关联如表 第一步:实现Person表和IdCard表的实体类第二步:1、进行Person实体类的配置,如下:<classname="entity.Person"><idname="id"><generatorclass="sequence">&l......
  • 记录一次springBoot+hibernate+JPA+swagger2+链接人大金仓的项目demo
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.spring......
  • hibernate.cfg.xml配置文件简介
    1.Hibernate核心配置文件,也即hibernate.cfg.xml,还可以是hibernate.properties格式。包含了数据库连接的相关信息以及映射文件的基本信息。通常情况下,该配置文件默认放在项目的src目录下,当项目发布后,该文件会在项目的WEB-INF/classes路径下。2.常用的模板<?xmlversion="......
  • Spring与Hibernate的整合
    1.Spring与Hibernate的整合1.1.在Spring容器中创建SessionFactory为了避免硬编码的资源查找与应用程序对象紧密耦合,Spring允许你在Spring容器中以bean的方式定义诸如JDBCDataSource或者HibernateSessionFactory的数据访问资源。任何需要进行资源访问的应用程序对象只需要持有......
  • Hibernate对象的CRUD操作
    1.  Hibernate对象的CRUD操作1.1. 对象的三种状态瞬时(Transient)-由new操作符创建,且尚未与HibernateSession关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)。如果瞬时(Transient)对象在程序中没有被......
  • Hibernate HQL详解
    1.  HibernateHQL详解1.1. hql简介Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的概念。看个示例,看看sql和HQL的相同与不同:Sql:select*......
  • Hibernate关联关系映射
    1.  Hibernate关联关系映射1.1. onetoone<classname="Person"><idname="id"column="personId"><generatorclass="native"/></id><jointable="PersonAddress"......