Hibernate之缓存机制

本文来自动力节点课堂
链接:https://pan.baidu.com/s/1nRB8iPKc25yTx0JRXGcy-Q 密码:ws2w

1、缓存的分类:

  • 事务范围的缓存
    hibernate的一级缓存属于事务范围的缓存,是单session缓存。当事务结束的时候,缓存的生命周期也会结束。事务缓存是以内存作为缓存介质的。
  • 应用范围的缓存
    hibernate的二级缓存属于应用范围的缓存,是单SessionFactory缓存。它可以被应用范围内的所有事务访问,当应用结束的时候缓存生命周期结束。它是以内存或硬盘做为缓存介质
  • 集群范围的缓存
    是多SessionFactory缓存,在集群环境中,在一台或者多态机器的进程共享。

2、一级缓存

一级缓存不能被取消,是由hibernate管理的。
证明一级缓存存在的方案:
这里写图片描述
结果:控制台只会查询一次数据库,第二次从缓冲区读取

3、快照

概念:快照是数据库的副本,快照始终和数据库的数据保持一致。

3.1 快照的作用

这里写图片描述
说明:虽然没有调用update(),但是在提交之后数据库的数据还是修改了,通过比较堆中的数据和快照的数据是否一致来决定是否执行更新,这体现了快照的起了作用。
补充:快照的目的就是为了提高性能,因为快照的数据和数据库是保持一致的,所以我们可以提前比较快照的数据和要向数据更新的数据是否一致,这样可以避免向数据更新相同的数据,而快照是放在内存中的,这相比从数据库中获取数据效率是提高很多的。

3.2 刷新点和同步

Session的刷新点是指Session缓存中的数据更新,Session的同步是指Session的数据同步到DB。
Session刷新点有:

  1. 执行query()查询
  2. 执行session.flush()
  3. 执行事务的提交

Session同步点只有一个:事务的提交
ps:Session的刷新点可以修改,通过setFlushMode()来修改。

3.2.1 删除操作与刷新点

这里写图片描述
说明:数据库的数据没有被删除,因为没有提交事务,所以缓存中的数据更新不会同步到数据库

3.2.2 修改操作与刷新点

这里写图片描述
结论:只有到了刷新点才有可能执行update语句,如果修改的内容和快照的结果一致,这时候是不执行update操作的,否则执行,这点和“删除操作与刷新点”是不同的。

3.2.3 插入操作与刷新点

这里写图片描述
说明:不等到刷新点的到来,在执行save()方法就会执行insert,这点又是和删除、更新不一样的。

4、二级缓存

二级缓存被称为SessionFactory级的缓存,它的生命周期和应用的生命周期一致的。
SessionFactory缓存分为两种:内置和外置。
SessionFactory的内置缓存存放了映射元数据和预定义SQL语句,SessionFactory的外置缓存也被称为Hibernate的二级缓存。
二级缓存的数据一般为只读的,因为所有的session都共享一个SessionFactory,所以如果能修改的话会出现脏读的情况。
Hibernate只提供了二级缓存的规范,需要第三方的插件,例如Ehcache.
二级缓存和一级缓存的对象是不一样的

待续。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值