我们有一个 Spring Boot Web 服务(带有 Spring Data、Hibernate),它通过从数据库读取整个表并返回它来生成一个巨大的文件。执行此操作需要花费大量时间,这远远超过了客户端设置的超时时间。所以我决定使用ehcache来缓存整个表的数据并从中生成文件(我知道缓存不是为此设计的,但我没有任何其他想法)。它的表现令人满意。但当我们需要更新数据时,问题就来了。更新发生在每个记录级别,但缓存存储在整个表级别。我不确定如何使 ehcache 查看缓存对象中的记录并修改它们(由于某些性能原因,我不想将每一行存储为单独的缓存对象)。非常感谢对此的任何帮助。
现在,为了管理这个问题,我摆脱了 ehcache 并使用了 HashMap 。这导致了很多我不喜欢的样板代码。
编辑:有没有办法连接到 ehcache 逐出机制并手动更改缓存对象?
最佳答案
使用 ehcache.xml 中的 timeToLiveSeconds 参数,您可以指定数据在缓存中的时间。一种选择是提供一个时间(例如 24 小时),因此此时数据将在缓存中,并在下次方法调用时刷新。
为了避免客户端进行这个调用(因为花费时间),可以做一个Spring定时任务,以相同的周期调用这个,这样缓存就会定期刷新。
另一种方法是在调用特定函数进行更改时强制刷新缓存。所以你可以删除缓存,然后再次调用该方法来重新加载缓存中的数据。此链接告诉您如何删除缓存以强制刷新:http://forum.spring.io/forum/spring-projects/data/55466-how-to-force-ehcache-to-refresh
关于java - 缓存整个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450496/