zoukankan      html  css  js  c++  java
  • Hibernate学习---缓存机制

    前言:这些天学习效率比较慢,可能是手头的事情比较多,所以学习进度比较慢。

    在之前的Hibernate学习中,我们无论是CURD,对单表查询还是检索优化,我们好像都离不开session,session我们之间也简单的说过,它是一个缓存,这一篇文章就就Hibernate的缓存进行一些介绍,我们将从以下几点进行:

    • 缓存的分类
    • 一级缓存
    • 快照
    • 二级缓存
    • EHCache配置
    • 二级缓存内容配置
    • 总结

    一丶缓存的分类:
    Hibernate中缓存分为一级缓存和二级缓存,像我们之前经常用到的session是一级缓存,二级缓存Hibernate并没有内置,但是它提供了支持和规范,我们可以通过一些第三方插件来使用这些二级缓存,使用之前当然要进行配置。

    二丶一级缓存:
    ①一级缓存就是session缓存,其实就是内存中的一块空间,在这个内存空间中存放了相互关联的java对象。

    ②session缓存是事务级缓存,随着事务 的开启而开启,随着事务的关闭而关闭,session缓存由Hibernate进行管理。

    ③当我们使用session的load() get() save()等方法的时候Hibernate会对相关的实体对象进行缓存。

    ④session的刷新与同步,session的刷新是指session缓存中的数据更新,session同步是指将session中的数据同步到数据库中,执行同步的时间只有一个,即事务的提交,但是session的刷新可以有几个,主要有一下三个刷新点:
    (1)执行Query查询
    (2)执行session.flush()
    (3)执行事务的提交

    三丶快照
    什么是快照?
    快照就是副本,Hibernate中的快照就是数据库的副本,快照中的数据是由Hibernate自己维护。快照中的数据由Hibernate自己维护,快照中的数据保持和数据库是一致,代码不能对它进行修改,其作用主要是为了在处理数据的更新时,将session中的数据和快照进行比对,(即和数据库中的数据进行比对)以此来判断是否执行update语句。

    当代码通过session的查询方法调用,将数据加载到内存中后,Hibernate会将此数据存放于session缓存中,当然快照中也有该数据的副本。默认情况下,在事务提交的时候会比对session和快照中的数据,如果不同,则数据发生了更新,会将session中缓存的数据用update进行更新,如果相同,说明数据未发生改变,无需做出同步。

    四丶二级缓存:
    二级缓存是SessionFactory级的缓存,其生命周期和SessionFactory一致,SessionFactory缓存可以依据功能和目的的不同划分为内置缓存和外置缓存。

    SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句。SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。

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

    Hibernate本身只提供了二级缓存的规范,但是并为实现,故需要第三方缓存产品的支持。
    常用的二级缓存第三方插件有:EHCache,Memcached,OSCache,SwrmCache,JBossCache等。这里我们就不一一介绍。

    二级缓存的内容分为:

    • 类缓存
      缓存我们查询的实体类(详情)
    • 集合缓存
      缓存的是集合中所包含对象的id
    • 查询缓存
      缓存的是查询语句对应的结果

    本篇文章就EHCache来进行配置和说明。

    五丶EHCache的配置:
    ①在使用这个二级缓存之前我们需要导包(黄色涂鸦部分是我们要的包):
    这里写图片描述

    ②导包过后我们需要在Hibernate的主配置文件中开启二级缓存:

    这里写图片描述

    在这个路径中properties文件中可以找到我们需要的属性。

    这里写图片描述

    ③开启过二级缓存后需要需要为这个二级缓存开辟一片缓存空间,同样我们需要在主配置文件中配置开辟一片缓存空间:
    这里写图片描述

    这里写图片描述

    ④最后我们还需要一个二级缓存配置文件
    这里写图片描述
    这里写图片描述

    这个配置文件在这个jar包最底部,名字叫:ehcache-failsafe.xml,我们将它改为ehcache.xml,并发到项目根目录下:

    这里写图片描述

    这样我们的二级缓存的环境就配置好了。

    六丶缓存内容的配置:
    上面我们提及到了缓存的内容,接下来我们就来看看二级缓存的内容是如何配置的:
    首先需要在主配置文件中指定类缓存和集合缓存:
    ①类缓存的配置
    我们需要在映射文件中指定的类中添加如下图的配置:
    这里写图片描述

    ②集合缓存的配置
    在指定集合内进行配置
    这里写图片描述

    ③查询缓存的配置
    在主配置文件中配置Query缓存
    这里写图片描述

    七丶总结
    Hibernate提供的两级缓存机制,在信息量访问较大的情况下,能够通过避免相同的查询,减少访问数据库的次数,来缓解服务器的压力。这样的机制大大提高了系统的整体访问效率,同时也降低了对服务器硬件的要求,要学会根据业务的需要来使用Hibernate的缓存机制,不要盲目使用。

  • 相关阅读:
    vue3配置rem适配
    webPack转vite2
    vite ant Design vue按需加载
    Vue3 +Vite+ts
    vite 2.0 动态引入加载图片
    Vue3使用vmdeditor自定义锚点
    ThinkPHP6 路由
    DIV+CSS 文本属性
    DIV+CSS 入门篇 CSS选择器
    如何不使用react,也能解析jsx?
  • 原文地址:https://www.cnblogs.com/MindMrWang/p/8143999.html
Copyright © 2011-2022 走看看