Ehcache使用READ_WRITE对象的永久属性

时间:2013-04-05 13:56:51

标签: java hibernate ehcache

我在我的项目中将Ehcache设置为Hibernate的二级缓存。所有对象都将通过Hibernate进行更新,并具有CacheConcurrencyStrategy.READ_WRITE的缓存策略。在我看来,缓存中永远不应该有过时的数据,因为如果发生更新,该对象将从缓存中删除。在应用程序之外不会对数据库进行更新。

我的问题是,在定义缓存时,将永恒属性设置为true是有道理的。我想不出对象应该从缓存到期的任何原因,因此我倾向于将永恒设置为真。我误解了Ehcache的行为吗?

1 个答案:

答案 0 :(得分:2)

我认为这取决于几件事。

你的实体如何“长寿”?如果您处理从未删除过的实体,它们将永远存在于您的缓存中,占用内存。如果它们只处理一次 - 与经常访问相反,这没有任何意义。

你的缓存有多大?它们会溢出到磁盘吗?您使用哪种记忆驱逐政策?
我假设你限制缓存大小,所以放更多&缓存中的更多元素将导致驱逐发生,因此您需要考虑适当的驱逐策略;因为这里糟糕的选择可能会导致缓存未命中,否则可以避免。它也可能导致您最想避免的磁盘I / O(取决于您的配置)。

作为积极的指标,你可以选择永久缓存

  • 如果要缓存的对象数量相对较小且不超过缓存大小
  • 您定期以较小的间隔(如每天)重新启动应用程序(并清除缓存),这样无论如何都不会遇到缓存大小
  • 如果经常访问相同的对象,那么你可以有意义地使用LRU或LFU驱逐政策

请注意,这些或多或少是经验法则;具体情况可能需要特定评估;)