当前位置: 首页 > 知识库问答 >
问题:

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

傅宏恺
2023-03-14

我相信,明智地使用Hibernate的二级缓存可以很好地提高我的应用程序的性能,为此,我已经开始从internet和Hibernate课程学习它。虽然关于二级缓存及其工作方式有很多很好的解释,但我的目标是从我没有找到的具体问题开始,准确地了解事物的工作方式,因此我将问一些关于Hibernate缓存的一般问题,特别是关于二级缓存的问题。

A、 我很乐意回答问题,即使有些问题看起来很明显或无关紧要

>

  • 配置了2级缓存后,1级缓存会被禁用吗?如果没有,那么在尝试获取实体时事件的html" target="_blank">过程是如何发生的,哪个缓存级别首先被击中?

    查询缓存是否将查询文本保存为HQL或本机SQL?

    直接通过JPA和Hibernate使用Hibernate,2级缓存的工作方式是否相同?

    我知道查询缓存通过命中位于查询缓存中的ID为的二级缓存参与二级缓存。如果某些ID由于某种原因不再位于二级缓存中,那么会再次获取所有实体,还是仅获取不存在的部分?

    关于同步-通过在某个事务中更新存储在第2级缓存中的实体-如果有的话,该实体何时会在第2级缓存中更新?将感谢有关此行为如何影响第2级缓存和查询缓存的更多详细信息。


    谢谢!

  • 共有2个答案

    易宣
    2023-03-14

    更多细节:

    [4]。查询缓存与更新时间戳缓存一起工作。如果插入/删除/更新实体类型的任何实例,则该实体类型的所有查询都将无效。因此,如果任何实体消失,则该实体类型的所有查询都将无效,因此查询将被重新执行。查询缓存以这种方式工作,因为Hibernate无法确定特定实例是否被任何查询触及,因此它需要一种安全但不太理想的方法。因此,查询缓存可能只在大多数只读场景中提供性能提升。

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

    程成天
    2023-03-14

    >

  • 否。继续使用一级缓存。唯一的区别是,实体可能来自二级缓存,而不是数据库,并且除了数据库之外,它们还保存到二级缓存。

    与HQL不同,因为条件查询也可以缓存。我认为使用了SQL。但这并不是必须缓存的唯一内容:查询的参数也会被缓存。不过,您不应该在意这一点:缓存会缓存您的查询,无论它使用什么都无关紧要,只要执行两次相同的查询就会命中缓存,而执行未缓存的查询则不会。

    只有那些不在缓存中的,好的。测试它并查看执行了哪些SQL查询。

    这取决于缓存并发策略和缓存的功能。第二级缓存主要在实体为只读或几乎只读时有用。

  •  类似资料:
    • 问题内容: 我想在hibernate项目中使用二级缓存,但是我只对hibernate二级缓存了解一点,任何人都可以解释我应该如何在代码中使用它以及需要什么配置和.jar文件吗?我将这些设置设置为我的hibernate.cfg.xml文件 并添加这些jar文件, 我想知道我是否需要更改其他配置? 我怎么知道我的项目使用二级缓存? 如果只是设置此设置,hibernate将自动使用此设置,否则我必须在我

    • 问题内容: 我正在开发hibernate+ ehcache程序。 ehcache.xml 我在bean.xml中提到了ehcache 我在dao类中的调用方法是 输出为: 但是它在数据库中命中了两次。我在代码中没有发现任何错误。请向我建议为什么它在数据库中命中了两次。 问题答案: 我已经解决了我的问题。我需要添加 在域类中。

    • 1、一级缓存:指的是mybatis中sqlSession对象的缓存,当我们执行查询以后,查询的结果会同时存入sqlSession中,再次查询的时候,先去sqlSession中查询,有的话直接拿出,当sqlSession消失时,mybatis的一级缓存也就消失了,当调用sqlSession的修改、添加、删除、commit()、close()等方法时,会清空一级缓存。 2、二级缓存:指的是mybati

    • 本文向大家介绍Hibernate中一级缓存和二级缓存之间的区别,包括了Hibernate中一级缓存和二级缓存之间的区别的使用技巧和注意事项,需要的朋友参考一下 Hibernate支持两种类型的缓存,一种是第一级缓存,另一种是第二级缓存。  一级缓存是会话级缓存,它始终与会话级对象关联。这种类型的缓存用于通过缓存对象的状态来最小化Db交互。 那不是在事务中完成每次修改之后更新,而是仅在事务结束时更新

    • 尝试使用infinispan作为Hibernate的二级缓存,但总是给我以下错误 org.infinispan.jmx.JMX MBean实例类型=CacheManager, name="DefaultCacheManager"已经在'org.infinispan'JMX域下注册。如果您想允许多个配置了相同JMX域的实例,请在org.infinispan.jmx.JmxUtil.buildJmxD

    • 当你使用本地(在内存中)缓存时,服务器可以缓存一些信息并快速地检索它,但是其他服务器不能访问这个缓存数据,他们需要到数据库中查询同样的信息。 如果你喜欢使用分布式缓存让其他服务器访问缓存的数据,由于它有一些序列化/反序列化和网络延迟开销,则需要注意:在某些情况下,它可能会降低性能。 缓存需要处理的另一个问题:缓存失效。 There are only two hard things in Compu