9

我看到很多文章说在Hibernate中使用二级缓存会提高性能,但没有太多关于使用它的缺点。我不想将二级缓存视为一种神奇的“在这里启用免费更好的性能!” 按钮。谁能描述使用二级缓存的缺点,以便我了解使用它的含义?

4

2 回答 2

8

另一个答案中引用的观点似乎是有效的。然而,对我来说,主要的缺点是别的:

  1. 性能下降。是的,拥有缓存并不一定会给您带来更好的性能。Hibernate 需要做额外的工作来存储和更新缓存。如果缓存的实体经常更改而您不经常查询它们,那么启用缓存只会增加不必要的额外负担。

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

于 2013-01-18T03:34:22.537 回答
5

缺点:

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