`
y806839048
  • 浏览: 1119238 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

二级缓存的开启

 
阅读更多
1、首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置:  
<property name="hibernate.cache.use_second_level_cache">true</property> 

2.Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个  
  缓存工具。如下配置指定Hibernate使用EhCache缓存工具。  
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 
 
3、Hibernate在默认情况下并不会对所有实体对象进行缓存,所以,我们需要指定缓存哪些对象,  
在实体对象的映射文件中(相应的<class>标签内部),添加如下配置:  
<cache usage="read-only"/> 
 
usage="read-only"是“只读”缓存策略。  
 
注意,这个<cache>标签只能放在<class>标签的内部,而且必须处在<id>标签的前面!!!  
这个<cache>标签放在哪些<class>标签下面,就说明会多这些类的对象进行缓存  
 
4、对于第3步,有一个可选的方案是在hibernate.cfg.xml文件中指定哪些类的对象需要缓存,  
   而不需要使用<cache>标签来指定。如:  
   在hibernate.cfg.xml中添加如下配置:  
   <class-cache class="com.bjsxt.hibernate.Classes" usage="read-only" /> 
    
  注意,这个<class-cache>标签必须放在<mapping>标签的后面!!  


=================================================
一级缓存也叫Session级缓存,hibernate在执行save,update,saveOrupdate,get,load,list,iterate,lock方法时,会将数据放入一级缓存中,一级缓存中的数据可以通过evict和clear方法清理,它也会随着session的生命的结束而结束,也就是说当session生命周期结束或者session被关闭时,一级缓存中的数据随之清除。
二级缓存也叫sessionFactory缓存,二级缓存需要配置,二级缓存交给了第三方进行处理,常见的二级缓存支持有EHCache,OSCache,Hashtable,由于一级缓存有限(内存有限,session生命周期有限),所以二级缓存是一级缓存的弥补,二级缓存的生命跟SessionFactory有关联,二级缓存在sessionFactory生命周期中存在,二级缓存可以在内存和磁盘中。
hibernate查询数据,先从一级缓存中找,如果一级缓存中存在,则返回数据,一级缓存中不存在,就从数据库中找,在数据库中找到后,将数据放入一级缓存,如果配置了二级缓存,则是先从一级缓存中找,如果一级缓存不存在,再从二级缓存中找,如果二级缓存存在,则返回数据,如果二级缓存中不存在,则从数据库中找,在数据库中找到后,将数据放入一级缓存和二级缓存。
二级缓存有一个统计数据命中率的方法,数据命中率越高越好。
二级缓存的OSCache.property文件配置capacity大小和缓存在内存还是磁盘。
hibernate_cache_second_level true
cache_privider_class org.hibernate.cache.OSCachePrivider
hibernate_generate_statictis true
mapping Student.hbm.xml
class-cache class Student usage read-only,read-write,nonstrict-read-write,transactional
OSCache.jar,log4j.jar,OSCache.propertiry

<hibernate-configuration> <session-factory> <!-- 开启二级缓存 --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 设置缓存提供者 --> <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <mapping resource="cn/ineeke/entity/User.hbm.xml"/> <!-- 指定哪些实体需要使用二级缓存 --> <class-cache class="cn.ineeke.entity.User" usage="read-only"/> </session-factory> </hibernate-configuration>


分享到:
评论

相关推荐

    深入理解MyBatis中的一级缓存与二级缓存

    开启二级缓存需要在MyBatis的配置文件中加入 `&lt;settings&gt; &lt;setting name="cacheEnabled" value="true"/&gt;&lt;/settings&gt;`,并在需要开启二级缓存的mapper.xml中加入 `&lt;cache/&gt;`标签,同时让使用二级缓存的POJO类实现...

    Redis用作二级缓存

    Redis作为二级缓存是数据库系统优化的一个重要策略,特别是在高并发、大数据量的场景下,可以显著提升应用性能。在Mybatis中,二级缓存是一个跨Mapper共享的区域,用于存储查询结果,避免了重复查询数据库,从而降低...

    hibernate一级缓存和二级缓存的区别与联系

    缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存是 Hibernate 内置的,默认开启,与 Session 对象关联。它是一个事务范围的缓存,也就是说,每个...

    hibernate一级和二级缓存配置与详解

    然后,在`hibernate.cfg.xml`配置文件中,指定缓存提供者,并开启二级缓存: ```xml &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory ...

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    `hibernate.cache.use_query_cache`和`hibernate.cache.use_second_level_cache`分别开启了查询缓存和二级缓存。最后,通过`class-cache`元素配置了`EntityClass`的缓存策略,这里使用了"read-write",表示读写操作...

    mybatis一级缓存和二级缓存简单示例

    开启二级缓存后,相同的数据在不同 SqlSession 中查询时,如果一级缓存未命中,则会尝试从二级缓存中获取。二级缓存的生命周期更长,但在并发环境下需要谨慎使用,因为它可能会引发数据不一致的问题。 ### 开启缓存...

    Mybatis-plus基于redis实现二级缓存过程解析

    然后,我们需要在Mybatis-plus配置文件中开启二级缓存: ```properties mybatis-plus: global-config: db-config: id-type: auto table-underline: true configuration: cache-enabled: true map-underscore...

    hibernate开启二级缓存和查询缓存

    为了开启二级缓存,你需要做以下步骤: 1. 引入二级缓存库:如 Ehcache 或 Infinispan。 2. 在 Hibernate 配置文件中启用二级缓存。 3. 在实体类上添加 `@Cacheable` 注解或者在映射文件中配置 `&lt;cache&gt;` 元素。 4....

    MyBatis缓存(一级缓存、二级缓存)

    启用二级缓存需要在MyBatis的配置文件中开启缓存支持,并在对应的Mapper接口或XML配置中声明启用二级缓存。每个Mapper可以有自己的独立二级缓存,不同Mapper之间的缓存不会互相影响。 二级缓存的工作流程如下: 1. ...

    CPU二级缓存打开器

    CPU二级缓存打开器576479373 最近登录: 2008-12-28认证信息: 卖家信用: 商品数量: 0 开店时间: 2008-05-31 店铺所在地: 北京 您好,欢迎您光临我的小店"576479373"!我

    Hibernate二级缓存

    Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...

    Spring集成的Hibernate配置二级缓存

    本文将详细探讨如何在Spring集成的Hibernate环境中配置二级缓存,以及其背后的原理和实践。 首先,我们需要了解什么是二级缓存。在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个...

    MyBatis3开启二级缓存

    **MyBatis3开启二级缓存详解** 在Java Web开发中,MyBatis作为一个轻量级的持久层框架,以其灵活、高效的特性深受开发者喜爱。其中,缓存机制是提高应用性能的重要手段之一。本篇将详细介绍如何在MyBatis3中启用二...

    mybatis一二级缓存

    二级缓存的配置需要在 MyBatis 的配置文件中开启,并在对应的 Mapper 文件中启用。每个 namespace 都有自己的独立缓存,确保了不同命名空间下的操作互不影响。 二级缓存的工作流程如下: 1. 当一个 SqlSession 执行...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    在`application.yml`或`application.properties`中开启Hibernate二级缓存并指定使用Redis: ```yaml spring: jpa: hibernate: cache: use_second_level_cache: true region.factory_class: org.hibernate....

    spring二级缓存

    Spring框架的二级缓存机制是其企业级应用中提高数据访问效率的重要组成部分。在这个例子中,我们将探讨如何在Spring环境中实现二级缓存,主要涉及Spring与Hibernate集成使用EhCache的情况。 一级缓存是ORM框架(如...

    47-二级缓存 Hibernate-Shiro-MyBatis

    1. 在mybatis-config.xml中开启二级缓存,并指定缓存实现(默认使用内存实现,也可自定义如Ehcache)。 2. 在Mapper XML文件中启用二级缓存,针对特定的Mapper或全项目。 3. 编写自定义缓存实现,处理并发和过期策略...

    hibernate 二级缓存详解

    Hibernate 二级缓存是针对SessionFactory级别的全局缓存,与一级缓存(Session级别)不同,一级缓存只在单个Session生命周期内有效。二级缓存则允许不同Session之间共享数据,提高了数据访问效率,减少了对数据库的...

    mybatis二级缓存学习

    在MyBatis的配置文件中,需要开启全局的二级缓存: ```xml ``` 3.2 Mapper配置 在Mapper的XML文件中,使用`&lt;cache&gt;`元素配置二级缓存: ```xml ... ``` 参数解释: - eviction:缓存淘汰策略,如LRU...

    hibernate二级缓存

    一级缓存默认开启,而二级缓存需要手动配置。 要启用Hibernate的二级缓存,首先需要选择一个缓存提供商,如Ehcache、Infinispan或Gemfire等。Ehcache是一种广泛使用的开源缓存解决方案,它提供了内存和磁盘存储,...

Global site tag (gtag.js) - Google Analytics