当前位置:  开发笔记 > 数据库 > 正文

Hibernate中的第一级和第二级缓存是什么?

如何解决《Hibernate中的第一级和第二级缓存是什么?》经验,为你挑选了4个好方法。

任何人都可以用简单的话来解释Hibernate中的第一级和第二级缓存是什么?



1> Dennis C..:

1.1)一级缓存

第一级缓存始终与Session对象关联.Hibernate默认使用此缓存.在这里,它处理一个接一个的事务,意味着不会多次处理一个事务.主要是它减少了在给定事务中生成所需的SQL查询的数量.这不是在事务中完成的每个修改之后更新,而是仅在事务结束时更新事务.

1.2)二级缓存

二级缓存始终与Session Factory对象关联.在运行事务时,它在两者之间加载会话工厂级别的对象,以便这些对象可供整个应用程序使用,而不是绑定到单个用户.由于对象已经加载到缓存中,因此每当查询返回一个对象时,就不需要进行数据库事务.这样二级缓存就可以工作了.在这里我们也可以使用查询级缓存.

引用自:http://javabeat.net/introduction-to-hibernate-caching/


+1用于映射带有会话对象的第一级缓存和带有会话工厂对象的第二级缓存.我甚至不需要继续阅读.
@ses在大多数情况下你需要一级缓存.否则,您将遇到非常糟糕的性能问题,如N + 1查询,或者没有急切的预取缓存,或者每次访问属性时都会查询一次.

2> lomaxx..:

Streamline Logic博客上的第一级缓存有一个非常好的解释.

基本上,第一级缓存在每个会话的基础上发生,因为第二级缓存可以在多个会话之间共享.


那个简单的话就在那里,我不知道他们为什么这么难以解释它
这实际上对我来说更清楚.第一个是每个会话,其中第二个是多会话,我记得很简单.我们不会两次投票吗?:d

3> Creditto..:

这里有一些hibernate缓存的基本解释......

第一级缓存与"会话"对象相关联.缓存对象的范围是会话.会话关闭后,缓存的对象将永远消失.默认情况下启用一级缓存,您无法禁用它.当我们第一次查询实体时,它从数据库中检索并存储在与hibernate会话相关联的第一级缓存中.如果我们使用相同的会话对象再次查询同一个对象,它将从缓存加载,并且不会执行sql查询.可以使用evict()方法从会话中删除加载的实体.如果已使用evict()方法删除该实体,则下一次加载此实体将再次进行数据库调用.可以使用clear()方法删除整个会话缓存.它将删除存储在缓存中的所有实体.

二级缓存与第一级缓存不同,后者可在会话工厂范围内全局使用.在会话工厂范围中创建二级缓存,并且可以在使用该特定会话工厂创建的所有会话中使用.这也意味着一旦会话工厂关闭,与之关联的所有缓存就会消失,缓存管理器也会关闭.每当hibernate会话尝试加载实体时,它首先在第一级缓存中寻找实体的缓存副本(与特定的hibernate会话相关联).如果实体的缓存副本存在于第一级缓存中,则它将作为load方法的结果返回.如果第一级缓存中没有缓存实体,则查找二级缓存以获取缓存实体.如果二级缓存具有缓存实体,则它将作为load方法的结果返回.但是,在返回实体之前,它还存储在第一级缓存中,以便下一次调用实体的加载方法将从第一级缓存本身返回实体,并且不需要再次进入二级缓存.如果在第一级缓存和第二级缓存中也找不到实体,则在作为load()方法的响应返回之前,执行数据库查询并将实体存储在两个缓存级别中.


优秀的解释!如果你能绘制一些序列图,那就太棒了!

4> Vlad Mihalce..:

一级缓存

Hibernate试图将持久性上下文推迟到最后一刻.正如我在本文中解释的那样,这种策略传统上称为事务性后写.

后写与Hibernate刷新更相关,而不是任何逻辑或物理事务.在交易期间,可以多次发生冲洗.

在此输入图像描述

刷新的更改仅对当前数据库事务可见.在提交当前事务之前,其他并发事务不会看到任何更改.

由于第一级缓存,Hibernate可以进行多种优化:

声明批处理

防止丢失更新异常

二级缓存

一个适当的缓存解决方案必须跨越多个Hibernate会话,这也是Hibernate支持额外的二级缓存的原因.

二级缓存绑定到SessionFactory生命周期,因此仅在SessionFactory关闭时(通常在应用程序关闭时)销毁它.二级缓存主要是基于实体的,但它也支持可选的查询缓存解决方案.

有关更多详细信息,请查看此文章.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有