Hibernate的一级缓存和二级缓存(七)

简介: Hibernate的一级缓存和二级缓存(七)

一. Hibernate的一级缓存


20181020183851571.png


2018102019232881.png


20181020192354619.png


一级缓存的范围是Session。


一级缓存的特点,只在session范围有效,作用时间短,效果不是特别明显,在短时间内多次操作数据库,效果比较明显。


二. 一级缓存的测试


@Test
  public void cacheTest(){
    Session session=HibernateUtil.getSession();
    User user1=session.get(User.class,8);
    User user2=session.get(User.class,8);
    System.out.println(user1==user2);
    session.flush();
  }


查看控制台:


20181020192637502.png


只执行了一条语句,返回值为true。 即说明,只从数据库中中查询了一次。

只查询一次,是因为快照区的作用.


2018102019273845.png


Session关闭后,不能使用懒加载数据,如果session关闭后,使用懒加载数据报错


三.Hibernate的二级缓存


Hibernate提供了基于应用程序级别的缓存即为二级缓存,可以跨多个session,即不同的session都可以访问缓存数据。 这个缓存也叫二级缓存。


Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架!如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可; 不想用,直接移除,不影响代码。


 如果用户觉得hibernate提供的框架框架不好用,自己可以换其他的缓存框架或自己实现缓存框架都可以。 


什么样的数据,适合放在二级缓存中呢?


1. 很少被修改的数据

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

3. 不会被并发访问的数据

4. 参考数据


什么样的数据,不适合放在二级缓存中呢?


 1. 经常被修改的数据

 2. 财务数据,绝对不允许出现并发

 3. 与其他应用共享的数据。


四. 如何开启二级缓存


Hibernate的一级缓存是默认开启的,二级缓存则需要自己手动进行开启。


四.一 添加EhcacheJar包


将Hibernate安装包下的Jar包,在hibernate-release-5.2.17.Final\lib\optional\ehcache


201810201939439.png


20181020194038369.png


四.二 在hibernate.cfg.xml中添加配置


   <!-- 开启二级缓存 -->
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.region.factory_class ">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
        <!-- 配置RegionFactory为Ehcache的RegionFactory -->
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>


Ctrl+鼠标,可以点击进去。


四.三 添加ehcache.xml文件


在src下添加ehcache.xml文件,内容是:


<ehcache>
    <diskStore path="java.io.tmpdir"/>
    <defaultCache
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true"
        />
</ehcache>


四.四 在要缓存的User.hbm.xml文件中添加


<class name="User" table="user" lazy="true">
    <!-- 添加二级缓存 -->
     <cache usage="read-write" /><!-- 二级缓存配置  只读时为read-only -->
    <!-- 主键 -->
    <id name="id" column="id">
      <generator class="native"></generator>  
    </id>
    .....
</class>


四.五 进行测试


@Test
  public void cache2Test(){
    Session session=HibernateUtil.getSession();
    User user1=session.get(User.class,8);//第一次查询语句
    User user2=session.get(User.class,8);//不会查询语句
    System.out.println(user1==user2);
    System.out.println("user1:"+user1);
    session.close();
    Session session2=HibernateUtil.getSession();
    User user3=session2.get(User.class,8);//不查询语句
    System.out.println("user3:"+user3);
    session.close();
  }


控制台输出为:


20181020195217475.png


只有一条查询语句,其中user1与user2相同,但是user1与user3不一样。


谢谢!!!

相关文章
|
28天前
|
存储 缓存 芯片
让星星⭐月亮告诉你,当我们在说CPU一级缓存二级缓存三级缓存的时候,我们到底在说什么?
本文介绍了CPU缓存的基本概念和作用,以及不同级别的缓存(L1、L2、L3)的特点和工作原理。CPU缓存是CPU内部的存储器,用于存储RAM中的数据和指令副本,以提高数据访问速度,减少CPU与RAM之间的速度差异。L1缓存位于处理器内部,速度最快;L2缓存容量更大,但速度稍慢;L3缓存容量最大,由所有CPU内核共享。文章还对比了DRAM和SRAM两种内存类型,解释了它们在计算机系统中的应用。
71 1
|
2月前
|
缓存 Java 数据库连接
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
文章介绍了MyBatis的缓存机制,包括一级缓存和二级缓存的配置和使用,以及如何整合第三方缓存EHCache。详细解释了一级缓存的生命周期、二级缓存的开启条件和配置属性,以及如何通过ehcache.xml配置文件和logback.xml日志配置文件来实现EHCache的整合。
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
|
2月前
|
缓存 NoSQL Java
揭秘性能提升的超级武器:掌握Hibernate二级缓存策略!
【9月更文挑战第3天】在软件开发中,性能优化至关重要。使用Hibernate进行数据持久化的应用可通过二级缓存提升数据访问速度。一级缓存随Session生命周期变化,而二级缓存是SessionFactory级别的全局缓存,能显著减少数据库访问次数,提高性能。要启用二级缓存,需在映射文件或实体类上添加相应配置。然而,并非所有场景都适合使用二级缓存,需根据业务需求和数据变更频率决定。此外,还可与EhCache、Redis等第三方缓存集成,进一步增强缓存效果。合理运用二级缓存策略,有助于大幅提升应用性能。
81 5
|
3月前
|
缓存 Java 数据库连接
Hibernate 中的查询缓存是什么?
【8月更文挑战第21天】
35 0
|
3月前
|
存储 缓存 Java
|
3月前
|
存储 缓存 Java
Hibernate 中默认启用二级缓存吗?
【8月更文挑战第21天】
33 0
|
3月前
|
存储 缓存 Java
Hibernate 中的二级缓存是什么?
【8月更文挑战第21天】
37 0
|
3月前
|
缓存 Java 数据库连接
Hibernate 中的一级缓存是什么?
【8月更文挑战第21天】
38 0
|
6月前
|
缓存 Java 数据库连接
hibernate二级缓存
在配置和使用Hibernate二级缓存时,你应该根据应用的需求和性能要求,合理选择缓存提供者和配置参数,以达到性能优化的目的。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
65 1
|
6月前
|
缓存 Java 数据库连接
【Mybatis】说一下 mybatis 的一级缓存和二级缓存
【Mybatis】说一下 mybatis 的一级缓存和二级缓存