使用Hibernate二级缓存有什么缺点?

时间:2013-01-17 23:53:01

标签: hibernate caching

我看到很多文章说在Hibernate中使用二级缓存会提高性能,但对使用它的缺点却没有太大帮助。我不想将二级缓存视为一种神奇的“在这里启用免费更好的性能!”按钮。任何人都可以描述使用二级缓存的缺点,以便我能够意识到使用它的含义吗?

2 个答案:

答案 0 :(得分:5)

其他答案中引用的分数似乎有效。然而,对我来说,主要的缺点是别的:

  1. 性能下降。是的,没有必要进行缓存以提供更好的性能。 Hibernate需要做额外的工作来存储和更新缓存。如果经常更改缓存的实体并且您不经常查询它们,则启用缓存只会增加不必要的额外负担。

  2. 缓存失效。如果您的应用程序具有通过不更新实体的方式执行更新的逻辑(例如,直接SQL更新,通过其他应用程序更新,批量HQL更新(我对最后一种情况不太确定:P)),Hibernate将不知道实体已更改。因此,当您进行查询时,您仍会在更新前获取图像。

答案 1 :(得分:3)

缺点:

  1. 群集部署需要一种方法来保持缓存同步。我们使用了一个简单的EhCache,我们自己的失效例程利用JGroups(高努力 - 推荐它)和使用Infinispan。如果您使用infinispan路线,则需要启用XA事务。这将需要由您的应用服务器提供的XA驱动程序和事务管理器,否则您将不得不使用Atomikos。
  2. 存在边缘情况(例如,多对一或一对多情况),其中实体的更新/删除未正确地反映在集合中。例如:http://www.tikalk.com/java/forums/hibernate-second-level-cache-collection-eviction