首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Hibernate二级缓存的高级知识

关于Hibernate二级缓存的高级知识
EN

Stack Overflow用户
提问于 2013-08-24 15:35:56
回答 2查看 928关注 0票数 0

我相信,明智地使用Hibernate的二级缓存将使我的应用程序的性能做得很好,为此,我已经开始从互联网和Hibernate课程中学习它。虽然在2级缓存中有相当好的解释,并且基本上是它的工作方式,但我的目标是准确地了解事情是如何工作的,从我没有发现的具体问题开始,因此我将问一些关于Hibernate缓存的一般问题,特别是在2级缓存上。

关于回答的说明:

答:我很想回答一些问题,即使有些问题看起来很明显或无关紧要。

如果一个问题取决于缓存提供者,我想听听关于Ehcache的答案

C.欢迎回答因不确定性而提出的部分问题。

问题:

  1. 一旦配置了二级缓存,第一级缓存是否会被禁用?如果没有,那么在尝试获取实体时事件的过程是如何发生的,哪个缓存级别会首先被击中?
  2. 查询缓存是否将查询文本保存为HQL或本机SQL?
  3. 二级缓存是否可以通过JPA和Hibernate直接使用Hibernate实现相同的工作?
  4. 我理解查询缓存参与了第二级缓存,通过访问位于查询缓存中的ID的第二级缓存。如果某些ID由于某种原因不再位于二级缓存中,那么所有实体是否会再次被获取,或者仅仅是不存在的部分呢?
  5. 关于同步--通过更新存储在第二级缓存中的实体,在某个事务中--如果有的话,什么时候在二级缓存中更新该实体?将欣赏更详细的关于这个行为对二级缓存和查询缓存可能产生的影响。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-24 15:48:14

  1. 不是的。继续使用第一级缓存。唯一的区别是,实体可能来自于二级缓存,而不是数据库,并且它们被保存到数据库之外的第二级缓存中。
  2. 不是HQL,因为标准查询也可以缓存。我认为使用了SQL。但这并不是唯一必须缓存的东西:查询的参数也会被缓存。但是,您不应该关心这一点:缓存您的查询,不管它使用什么,只要执行两次相同的查询就会命中缓存,而执行非缓存的查询就不会了。
  3. 是。
  4. 只有那些不在缓存中的,AFAIK。测试它并查看执行了哪些SQL查询。
  5. 这取决于缓存并发策略和缓存的功能。当实体为只读或几乎只读时,二级缓存主要是有用的.
票数 1
EN

Stack Overflow用户

发布于 2013-08-27 08:43:53

还有几个细节:

4.查询缓存与更新时间戳缓存一起工作。如果插入/删除/更新实体类型的任何实例,则该实体类型的所有查询都无效。因此,如果任何实体都消失了,那么对该实体类型的所有查询都将失效,因此查询将被重新执行。查询缓存是这样工作的,因为Hibernate要知道某个特定实例是否受到任何查询的影响太昂贵了,所以它采用了一种安全但不太理想的方法。因此,查询缓存只能在大多数只读情况下提供性能提高.

5.通常,第二级缓存在事务的afterCompletion()事务同步回调中更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18420217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档