我是Ehcache的新手,我正在寻找如何做到这一点,但现在很确定这是否是一个正常的用例。我正在开发一个不是传统Web应用程序的应用程序,它只能由少数人一次使用,用于从非常大的数据集中检索数据,而不是每次我都调用数据库想要使用缓存来缓存这个大表。但是,有可能在此表中添加一个新条目,我需要在缓存中反映这一点,但我不想每次重新加载整个缓存,因为它非常大。关于如何处理这个/更多资源的任何建议都表示赞赏。
答案 0 :(得分:1)
您应该了解Hibernate query cache。简单来说:它在二级缓存(L2
)之上工作,并存储查询结果。 但它只存储应由查询返回的记录的ID,而不是整个列表。这意味着你需要让L2工作并进行微调。
在您的方案中,假设您在表T
中有1M条记录,并且查询平均返回1K。第一次运行此查询时,它将错过查询缓存并且:
下次执行查询时,它将点击查询缓存并从L2查找所有结果。当您修改表T
时,会出现一个有趣的部分。 Hibernate会发现查询缓存中的结果可能是陈旧的,它会使整个缓存无效,但不会使L2无效。它基本上会重复1-4点,但只刷新查询缓存(表T
中的大多数实体已经在L2中)。
在某些情况下它很有效,在其他情况下它会在不可预测的时刻引入N + 1问题。这只是一个冰山一角,你应该非常小心,因为这个机制非常脆弱,需要很好的理解。