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)缓存的命中率
提高缓存数据的利用率,缓存中存放的是用户常用的数据,如果缓存中存放的是用户不常用的,那么就说缓存的命中率不高。有些时候,是某些缓存数据在某个时刻使用率高,某个时刻使用率低,所以需要时刻更新,以提高缓存命中率。
一级缓存时用户线程独用的,二级缓存时线程们共用的。
探讨了对象的三种状态:暂时态、持久态和游离态,详细讲解了一级缓存和二级缓存的工作原理及意义,以及如何提高缓存的更新和命中率。

被折叠的 条评论
为什么被折叠?



