java - Hibernate二级缓存进阶知识

标签 java hibernate ehcache second-level-cache query-cache

我相信,通过明智地使用 Hibernate 的二级缓存,我的应用程序的性能将会得到很好的提高,为此,我已经开始从互联网和 Hibernate 类(class)中学习它。 虽然关于二级缓存及其工作原理有很好的解释,但我的目标是弄清楚事情到底是如何工作的,从我没有找到的具体问题开始,因此我会问一些关于 Hibernate 缓存的一般问题尤其是二级缓存。

回答注意事项:

A.我很乐意回答问题,即使有些问题看起来很明显或无关紧要。
B. 如果问题取决于缓存提供者,我想听听有关 Ehcache 的答案
C. 由于不确定性,欢迎回答部分问题

问题:

  1. 配置二级缓存后,一级缓存是否会被禁用?如果不是,那么尝试获取实体时事件的过程如何发生,哪个缓存级别首先被命中?

  2. 查询缓存是否将查询文本保存为 HQL 还是 native SQL?

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

  4. 我了解查询缓存通过使用位于查询缓存中的 ID 命中二级缓存来参与二级缓存。如果某些 ID 由于某种原因不再位于二级缓存中,是否会再次获取所有实体,或者仅获取不存在的部分?

  5. 关于同步 – 通过在某个事务中更新存储在二级缓存中的实体 – 如果有的话,何时会更新二级缓存中的实体?将了解此行为如何影响二级缓存和查询缓存的更多细节


    谢谢!

最佳答案

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

  2. 不像 HQL,因为 Criteria 查询也可以被缓存。我认为使用SQL。但这并不是唯一必须缓存的事情:查询的参数也被缓存。不过,您不应该关心这一点:缓存会缓存您的查询,只要执行相同的查询两次就会命中缓存,它使用的任何内容都无关紧要,而执行非缓存查询则不会。

  3. 是的。

  4. 仅那些不在缓存中的,据我所知。对其进行测试并查看执行了哪些 SQL 查询。

  5. 这取决于 cache concurrency strategy以及缓存的功能。二级缓存主要在实体只读或几乎只读时有用。

关于java - Hibernate二级缓存进阶知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420217/

相关文章:

java - 找不到类 org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer

java - mvn install 忽略 hibernate 映射文件

java - 确保始终从 Spring 应用程序的缓存中检索数据

java - 以跨平台方式引用 tools.jar 的正确方法

java - Wicket:防止在向导步骤中通过 TextField 提交表单

java - 使用 Android 应用程序在 Java/Tomcat 服务器中进行 Windows 身份验证

java - azure服务总线方法中的Abandon()向死信队列发送特定消息

java - 请提供 hibernate 条件中 If 语句的示例

java - Ehcache 复制缓存 RMI Bootstrap

java - jhipster不缓存查询结果