【发布时间】: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