0

我已经将我的一些对象配置为可缓存(在映射文件上),并且从我所看到的这个特定对象的情况来看,缓存的工作并不好。

对于其他对象,我看到每次迭代的命中计数都在增加,但错过的计数为 0,而对于这个对象,我看到它每次都错过了会话​​。

Elements in Memory: 8305 
Elements on Disk: 0 
Hit Count: 24915 
Missed Count 8305 
Put Count: 8305

我正在寻找一些可能是错误的指针。

  • 作为背景,我检查了 equals 和 hashCode 实现,甚至调试似乎也返回了正确的结果。
  • 此特定对象用于其他对象的集合以及顶级对象的集合中。
4

1 回答 1

2

当然,这些统计数据表明您正确地访问了缓存。

如果您通过 ID 获取对象,Hibernate 将大致遵循以下步骤:

  1. 签入一级缓存(Session对象)
  2. 检查二级缓存,并错过
  3. 从数据库加载对象
  4. 放入二级缓存以备下次使用

对于其他未注册未命中的对象,最可能的解释是您没有通过它们的 ID 访问它们,而是您使用了无法直接缓存访问的查询或某种关联。

于 2009-08-17T17:47:14.630 回答