说一下 hibernate 的缓存机制?

embedded/2024/9/23 9:28:00/

Hibernate 的缓存机制是为了提高应用程序的性能,通过减少对数据库物理数据源的访问频次而设计的。Hibernate 的缓存主要可以分为两个级别:一级缓存(也称为 Session 级别的缓存)和二级缓存(也称为 SessionFactory 级别的缓存)。

一级缓存(Session 缓存)

  • 内置:一级缓存是 Hibernate 默认的,与 Session 紧密相关,且不能被卸载。
  • 生命周期:与 Session 的生命周期相同,当 Session 关闭或清除时,一级缓存中的数据也会被清除。
  • 作用范围:缓存只对当前 Session 有效,不同的 Session 之间无法共享数据。
  • 实现方式:通过 Session 的 get() 或 load() 方法从数据库中加载对象时,Hibernate 会将这些对象放入一级缓存中。当再次需要这些对象时,会首先从一级缓存中查找,如果找到则直接返回,避免了对数据库的再次访问。

二级缓存(SessionFactory 缓存)

  • 可配置:二级缓存是一个可选的插件,可以在 Hibernate 配置文件中进行配置。
  • 生命周期:二级缓存的生命周期与 SessionFactory 的生命周期相同,通常比一级缓存的生命周期长。
  • 作用范围:可以被多个 Session 共享,因此可以实现跨 Session 的数据缓存。
  • 实现方式:二级缓存中存放的是对象的序列化数据,当需要从二级缓存中获取对象时,Hibernate 会先将其反序列化为对象。
  • 分类
    • 内置缓存:主要存储 Hibernate 的元数据(如映射文件、预定义的 SQL 语句等),这些数据是只读的,不需要进行同步。
    • 外置缓存:用于存储数据库数据的拷贝,可以被多个 Session 共享。外置缓存的介质可以是内存或硬盘。

缓存的并发访问策略

  • Hibernate 提供了多种并发访问策略,如只读、读写、非严格读写等,用于控制多个事务或 Session 并发访问缓存时的行为。

缓存的同步

  • 当数据库中的数据发生变化时,Hibernate 需要保证缓存中的数据与数据库中的数据保持一致。这通常是通过在数据更新时清除相关的缓存条目或通知缓存进行更新来实现的。

适合存放到二级缓存中的数据

  • 通常,那些读取频繁、修改不频繁的数据适合存放到二级缓存中,如用户的基本信息、配置数据等。而一些经常变化的数据则不适合放入二级缓存,因为它们的变化会导致缓存失效,从而失去缓存的优势。

http://www.ppmy.cn/embedded/38032.html

相关文章

【数学建模】天然肠衣搭配问题

2011高教社杯全国大学生数学建模竞赛D题 天然肠衣(以下简称肠衣)制作加工是我国的一个传统产业,出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段(原料),进入组装工序。传统的生产方式依靠人工…

低代码与云原生的技术解析:赋能企业数字化转型

随着数字化转型的深入推进,低代码和云原生技术逐渐成为企业关注的热点。本文将对这两种技术进行详细解析,探讨它们在企业数字化转型中的应用场景和优势,以期为企业提供更高效的解决方案。 引言 在当今时代,技术创新已成为企业核心…

《深入Linux内核架构》第4章 进程虚拟内存(1)

目录 4.1 简介 4.2 进程虚拟地址空间 4.2.1 进程地址空间分布 4.2.2 建立布局 本专栏文章将有70篇左右,欢迎关注,订阅后续文章。 第3章讲了两点:物理内存的管理,内核虚拟地址管理。 本章讲:用户进程的虚拟地址空间…

cesium 雷达遮罩(电弧球效果)

cesium 雷达遮罩(电弧球效果) 以下为源码直接复制可用 1、实现思路 通过修改“material”材质来实现轨迹球效果 2、代码示例 2.1 index.html <!DOCTYPE html> <html lang="en"><head><!

Typescript高级: 深入理解const和readonly

概述 在编程语言中&#xff0c;const 和 readonly 是两种用于声明常量或只读属性的关键字它们帮助开发者确保数据的不可变性&#xff0c;从而提高代码的安全性和可维护性虽然这两个概念在不同的编程语言中可能有所差异但本文将以 TypeScript 为例&#xff0c;深入探讨 const 和…

伪装目标检测论文阅读之Dual-SAM(CVPR-2024)

论文&#xff1a;link code&#xff1a;code Fantastic Animals and Where to Find Them:Segment Any Marine Animal with Dual SAM 摘要 作为水下智能的重要支柱&#xff0c;海洋动物分割(MAS)涉及对海洋环境中的动物进行分割。以往的方法在提取长范围上下文特征方面表现不佳…

QT上位机的学习

后面又该找工作了&#xff0c;这块的内容也需要好好学习&#xff01; QT 篇 QT上位机串口编程-CSDN博客 (1)可以通过安装虚拟串口来模拟串口通信的情况 发现我之前安装过&#xff08;9.0): 可以生成虚拟串口&#xff0c;无需实际硬件串口就可以实现同一台电脑上串口模拟通信…

gitlab集群高可用架构拆分部署

目录 前言 负载均衡器准备 外部负载均衡器 内部负载均衡器 (可选)Consul服务 Postgresql拆分 1.准备postgresql集群 手动安装postgresql插件 2./etc/gitlab/gitlab.rb配置 3.生效配置文件 Redis拆分 1./etc/gitlab/gitlab.rb配置 2.生效配置文件 Gitaly拆分 1.…