【问题标题】:Hibernate cache for scalar queries用于标量查询的休眠缓存
【发布时间】:2013-01-18 21:30:22
【问题描述】:

我已阅读 this post. 我无法按照本文中的建议获取整个对象。我得到 MIN,MAX,Count 值。于是发了新帖。 以下是我想要的和我拥有的。

  1. 我的 Spring 应用程序没有对 DB(MySQL) 进行任何更改。它只是读取数据。它不会知道对 DB 中现有数据所做的更改。
  2. 我的所有查询都返回标量数据。不是整个对象。 (例如:Select employee.name,office.address,MIN(employee.rec) from ... where..

  3. 我希望缓存我的查询。所以我在休眠配置中启用了查询缓存。并将cacheable="true" 添加到我的命名查询中。

4.我启用了二级缓存。

5.为持久化类添加如下注解。

@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

6。我想每 24 小时刷新一次缓存。所以更新了 ehcache.xml 中的timeToLiveSeconds defaultCache

这是正确的方法吗?如何从查询缓存中知道查询是否命中二级缓存?

更新:我添加了统计信息,二级缓存没有命中/未命中。

【问题讨论】:

  • 使实体可缓存没有意义,因为您永远不会从查询中返回它们。要知道是否命中缓存,请打开 SQL 日志记录(通过将属性 hibernate.show_sql 设置为 true),然后查看是否生成了查询。
  • 感谢@JBNizet。我假设我所有的其他配置都是正确的:)

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


【解决方案1】:

打开 SQL 日志记录和统计信息生成。如果您看到 SQL 查询日志记录,则表示缓存不起作用。

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.generate_statistics" value="true"/>

为了查看二级缓存的命中计数:

session.getSessionFactory().getStatistics().getSecondLevelCacheHitCount()

【讨论】:

  • 感谢您的回复。关于标量查询,这对二级缓存有影响吗?
  • 你可能想看看这个:stackoverflow.com/questions/8480268/…
  • 我不使用 iterate()。而且我无法获取整个对象,因为我需要在查询中使用 MAX()。我添加了上述配置。二级缓存没有命中。
猜你喜欢
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多