Hibernate对象持久化和一级缓存、二级缓存

探讨了对象的三种状态:暂时态、持久态和游离态,详细讲解了一级缓存和二级缓存的工作原理及意义,以及如何提高缓存的更新和命中率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.对象持久化和一级缓存
对象的三种状态(对于Hibernate来说,对象状态分为三种)
(1)暂时态
当对象刚创建和Session没有发生任何关系时,程序运行完就立刻消失,称为暂时态
(2)持久态
当执行如下代码时,对象变为持久态.
Emp e = new Emp();
session.save();
持久态的对象和 Session 发生了关系,如执行了 save、 get、 query 等方法.
Session 中会缓存该对象(Session 的缓存即一级缓存),Session 再获取对象时,首先去查找一级缓存, 如果没有才查询数据库,Session 要负责将持久态对象的变化更新到数据库.在调用flush()方法时更新,事务在提交时会自动调用Session的flush()方法.
(3)游离态
调用了 session.evict(Object obj)方法,和 Session 解除了关系.

2.二级缓存
当从一级缓存中查询时,每个用户线程对应一块Session缓存,假如有多个用户,就会创建多个Session.假设用户1要查询id=1的Emp对象,Session会首先查找内部是否有id=1的Emp对象,没有就去数据库查找,并保存到Session中,用户再访问时,就不需要去数据库中查找了,直接从Session中获得.但是如果多个用户都要查找id=1的用户,那么这些用户可能都要先去数据库中查询到结果,效率降低,并且这些Session中都保存着id=1的Emp对象,显然重复了.
由此引入二级缓存,二级缓存供所有用户享用,当用户1查询id=1的Emp对象,保存到一级缓存的同时,也会在二级缓存保存一份,之后其他用户再查询时,只需要到二级缓存中查找即可,不需要连接数据库.

缓存的意义:
缓存机制就是将数据库中常用的数据取出放入内存中,程序调用时直接从内存中取,不用每次使用数据都访问数据库,这样提高了效率。
(1)缓存的更新
缓存中的数据必须是同数据库中数据保持一致。
(2)缓存的命中率
提高缓存数据的利用率,缓存中存放的是用户常用的数据,如果缓存中存放的是用户不常用的,那么就说缓存的命中率不高。有些时候,是某些缓存数据在某个时刻使用率高,某个时刻使用率低,所以需要时刻更新,以提高缓存命中率。

一级缓存时用户线程独用的,二级缓存时线程们共用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值