Hibernate缓存原理与策略 Hibernate缓存原理:
Hibernate缓存原理:
对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等,但随之带来的就是数据访问效率的降低,和性能的下降,而缓存就是弥补这一缺点的重要方法.
缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问层中间.ORM在查询数据时首先会根据自身的缓存管理策略,在缓存中查找相关数据,如发现所需的数据,则直接将此数据作为结果加以利用,从而避免了数据库调用性能的开销.而相对内存操作而言,数据库调用是一个代价高昂的过程.
一般来讲ORM中的缓存分为以下几类:
1:事务级缓存:即在当前事务范围内的数据缓存.就Hibernate来讲,事务级缓存是基于Session的生命周期实现的,每个Session内部会存在一个数据缓存,它随着 Session的创建而存在,随着Session的销毁而灭亡,因此也称为Session Level Cache.
2:应用级缓存:即在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享(数据库事务或应用事务),事务之间的缓存共享策略与应用的事务隔离机制密切相关.在Hibernate中,应用级缓存由SessionFactory实现,所有由一个SessionFactory创建的 Session实例共享此缓存,因此也称为SessionFactory Level Cache.
3:分布式缓存:即在多个应用实例,多个JVM间共享的缓存策略.分布式缓存由多个应用级缓存实例组成,通过某种远程机制(RMI,JMS)实现各个缓存实例间的数据同步,任何一个实例的数据修改,将导致整个集群间的数据状态同步.
Hibernate的一,二级缓存策略:
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载,属于多事务级别,要防止事务并发性。
缓存是以map的形式进行存储的(key-id,value-object)
一级缓存(Session):
事务范围,每个事务(Session)都有单独的第一级缓存.
一级缓存的管理:当应用程序调用Session的save()、update()、saveOrUpdate()、get()或load(),以及调用查询接口的 list()、iterate()--(用的是n+1次查询,先查id)或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象,flush():使缓存与数据库同步。
当查询相应的字段如(name),而不是对象时,不支持缓存。
二级缓存(SessionFactory):
Hibernate的二级缓存策略的一般过程如下:
1:条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL句查询数据库,一次获得所有的数据对象(这个问题要考虑,如果你查询十万条数据时,内存不是被占用)。
2:把获得的所有数据对象根据ID放入到第二级缓存中。
3: 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
4:删除、更新、增加数据的时候,同时更新缓存。
Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query Cache。
Q:什么样的数据适合存放到第二级缓存中?
1.很少被修改的数据
2.不是很重要的数据,允许出现偶尔并发的数据
3.不会被并发访问的数据
4.参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。
不适合存放到第二级缓存的数据?
1 经常被修改的数据
2 财务数据,绝对不允许出现并发
3 与其他应用共享的数据。
常用的缓存插件 Hibernater 的二级缓存是一个插件,下面是几种常用的缓存插件:
EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持。
OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。
SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。
JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。
配置二级缓存的主要步骤:
1 选择需要使用二级缓存的持久化类,设置它的命名缓存的并发访问策略。这是最值得认真考虑的步骤。
2 选择合适的缓存插件,然后编辑该插件的配置文件。
Hibernate缓存原理与策略 Hibernate缓存原理:相关推荐
- Java Hibernate 二级缓存配置及缓存的统计策略
1.首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置: <propertyname="hibernate.cache.use_second_level_cache ...
- Hibernate学习(九)———— 二级缓存和事务级别详讲
序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人 ...
- Hibernate框架(持久化类、缓存、事务管理)
持久化类 java类与数据库的表建立了映射关系,该类被称为持久化类 1).编写规则 ①无参构造,使得Hibernate可通过反射建立对象 ②私有属性,get/set方法 ③持久化类提供一个唯一标识OI ...
- 高性能分布式缓存Redis--- Redis底层结构和缓存原理 --- 持续更新
高性能分布式缓存Redis全系列文章主目录(进不去说明还没写完)https://blog.csdn.net/grd_java/article/details/124192973 本文只是整个系列笔记的 ...
- mysql php 缓存机制_mysql数据库查询缓存原理是什么
mysql数据库查询缓存原理是:1.缓存SELECT操作的结果集和SQL语句,key为sql,value为查询结果集:2.如果新的SELECT语句到了,以这个sql为key去缓存中查询,如果匹配,就把 ...
- hibernate查询缓存_在Hibernate中启用实体和查询缓存
hibernate查询缓存 1.简介 在我执行过的与性能相关的任务中,这就是其中之一. 令人担心的是,如果对于特定实体每次都调用相同的查询,并且表数据在特定的时隙内不易更改,则我们可以使用Hibern ...
- 使用Hibernate和Spring设置分布式Infinispan缓存
一个非常典型的设置–需要分布式缓存的spring / hibernate应用程序. 但是事实证明,设置并不是那么简单. 您显然需要缓存. 可以使用EhCache,Hazelcast,Infinispa ...
- 在Hibernate中启用实体和查询缓存
1.简介 在我执行过的与性能相关的任务中,这就是其中之一. 令人担心的是,如果每次为特定实体调用相同的查询,并且表数据在特定的时隙内不易更改,则我们可以使用Hibernate缓存查询结果. 这意味着, ...
- mysql缓存淘汰机制_聊聊缓存淘汰算法-LRU 实现原理
前言 我们常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来.缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据.常用淘 ...
最新文章
- linux在shell中获取时间
- Entity Component System
- python随机画散点图-python散点图实例之随机漫步
- 主持人副语言包括什么_央视主持人大赛,董卿最精彩的这几段点评,居然被剪掉了...
- Session or Cookie?是否有必要使用Tomcat等一下Web集装箱Session
- python带通配符的字符串匹配_Bash技巧:实例介绍数个参数扩展表达式以处理字符串变量...
- SQL2000数据库中删除“坏表”的方法
- AI、元宇宙技术方兴未艾,软件测试重装上阵
- 华为GaussDB相比PostgreSQL做了哪些内核优化?
- node.js入门 - 7.异常处理与多进程开发
- 网络流(二)——最大流最小割定理
- 前端学习资料网址收集整理
- php基础-基本语法
- ADSL防御黑客攻击的十大方法(转)
- 联想交换机服务器型号,Dell Networking X系列交换机
- vs2008安装过程
- Tbase 源码 (八)
- 上传Android应用到腾讯应用宝,乐固加固应用使用
- LVGL官方文档-7.11.0-14-Overview-Displays
- 懂技术的产品就是全栈产品?扯.J.B.淡
热门文章
- mysql从入门到精通之数据库安装图解
- 【Joomla】TinyMCE - Add custom styles
- 【转】Android 面试题笔记-------android五种布局及其作用
- 华为总裁任正非谈企业管理:正确的方向来自于妥协
- 哥们,你侵权了,哥有权告你去!
- session传递参数_分布式 Session 之 Spring Session 架构与设计
- Python 从入门到精通:一个月就够了?真的能行嘛?
- 兵团教师计算机水平考试免考条件,兵团职称计算机考试政策.doc
- matlab的rvctools,rvctools 机器人工具箱,主要用于 仿真, 型很强。 matlab 270万源代码下载- www.pudn.com...
- yum update php5.5,(二)Centos7下Yum更新安装PHP5.5,5.6,7.0