【问题标题】:Which Hibernate Queries Hits Second Layer Cache?哪些 Hibernate 查询命中第二层缓存?
【发布时间】:2013-09-03 21:39:27
【问题描述】:

我刚刚添加了 Memcached 作为 Hibernate 的第二层缓存。安装缓存后,性能实际上受到了重大影响。所有查询都较慢。我意识到原因可能是由于我的大多数查询不是基于 id,所以没有使用第二层缓存。

我的问题是不应该不基于 id 的查询直接进入数据库而不访问缓存吗? Aka,在命中缓存之前确定查询是否“适合缓存”的决策?如果是这样,性能不应该更快吗?

【问题讨论】:

  • (i) 也许问题在于 Memcached 是一个远程进程,Hibernate 需要通过网络与之通信。内存中的 2LC,例如 Infinsipan 可能有助于加快速度。 (ii) 不确定您的配置,但最大的收获来自缓存大多数只读实体。查询缓存适用于没有实体更新的非常特定的用例。您应该从实体缓存开始,并考虑要缓存哪些实体。
  • 有道理,我实际上也启用了实体缓存。只是我所有的连接查询都需要更长的时间。
  • 禁用查询缓存(如果启用),并使用基于内存 Infinispan 的 2LC,看看这是否有助于加快速度。关于如何使用 Infinispan 2LC 的一些示例可以在 here 找到

标签: mysql hibernate caching memcached second-level-cache


【解决方案1】:

当我检查 Hibernate 代码时,看起来 Hibernate 在使用 HQL 查询时无法重用缓存(它没有从 HQL 编译器到它们的缓存机制)。

我可以建议您使用fjorm 而不是Hibernate。免责声明:我是 fjorm 的创始人。

【讨论】:

    猜你喜欢
    • 2014-11-28
    • 2011-12-18
    • 1970-01-01
    • 2014-06-25
    • 2018-11-18
    • 2012-03-18
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多