我们有一个spring boot web服务(带有spring数据,hibernate),它通过从数据库中读取整个表并返回它来生成一个巨大的文件。这需要花费大量时间,而不仅仅是客户设置的时间。所以我决定使用ehcache来缓存整个表的数据并从中生成文件(我知道缓存不是为此设计的,但我没有任何其他想法)。它表现令人满意。但问题出现在我们需要对数据进行更新时。更新来自每个记录级别,但缓存存储在整个表级别。我不知道如何让ehcache查看缓存对象中的记录并修改它们(由于某些性能原因,我不想将每一行存储为单独的缓存对象)。非常感谢任何帮助。
现在,为了管理这个,我摆脱了ehcache并使用哈希映射。这导致了很多我不喜欢的锅炉板代码。
编辑:有没有办法挂钩ehcache逐出机制并手动更改缓存对象?答案 0 :(得分:0)
在ehcache.xml中使用参数timeToLiveSeconds,您可以指定数据在缓存中的时间。一个选项是提供一个时间(例如,24小时),因此此时数据将在缓存中,并且将刷新下一个方法调用。
为了避免客户端执行此调用(因为花费的时间),您可以使Spring调度任务以相同的周期调用它,因此缓存将定期刷新。
其他方法是在调用特定函数进行更改时强制缓存刷新。因此,您可以删除缓存,然后再次调用该方法以重新为缓存中的数据收费。在此链接中告知如何删除缓存以强制刷新:http://forum.spring.io/forum/spring-projects/data/55466-how-to-force-ehcache-to-refresh