我在我的项目中将Ehcache设置为Hibernate的二级缓存。所有对象都将通过Hibernate进行更新,并具有CacheConcurrencyStrategy.READ_WRITE的缓存策略。在我看来,缓存中永远不应该有过时的数据,因为如果发生更新,该对象将从缓存中删除。在应用程序之外不会对数据库进行更新。
我的问题是,在定义缓存时,将永恒属性设置为true是有道理的。我想不出对象应该从缓存到期的任何原因,因此我倾向于将永恒设置为真。我误解了Ehcache的行为吗?
答案 0 :(得分:2)
我认为这取决于几件事。
你的实体如何“长寿”?如果您处理从未删除过的实体,它们将永远存在于您的缓存中,占用内存。如果它们只处理一次 - 与经常访问相反,这没有任何意义。
你的缓存有多大?它们会溢出到磁盘吗?您使用哪种记忆驱逐政策?
我假设你限制缓存大小,所以放更多&缓存中的更多元素将导致驱逐发生,因此您需要考虑适当的驱逐策略;因为这里糟糕的选择可能会导致缓存未命中,否则可以避免。它也可能导致您最想避免的磁盘I / O(取决于您的配置)。
作为积极的指标,你可以选择永久缓存
请注意,这些或多或少是经验法则;具体情况可能需要特定评估;)