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

Dan*_* T. 8 caching hibernate

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

Adr*_*hum 7

在另一个答案中引用的点似乎是有效的.但是,对我来说,主要的缺点是别的:

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

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


Καr*_*hικ 5

缺点:

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