java - 缓存整个表

标签 java spring hibernate caching ehcache

我们有一个 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/

相关文章:

java - 使用 openapi 和 openapi-generator-maven-plugin 的 requestbody 中的多个文件

java - 编写 spring.io REST Controller 的正确方法是什么?

java - 是否可以用 int 代替 List

java - 我对 org.springframework.mock.web 缺少什么依赖项?

spring - 如何将 spring 管理的服务 bean 注入(inject) Apache CXF Servlet

java - SQL Hibernate 没有重新调整与直接 SQL 查询相同的结果

java - 尝试检索 OracleConnection 但收到 null

java - 在 Spring Boot 中使用 SSL 身份验证的 SOAP Web 服务

java - 是否可以发送音频文件作为请求参数

java - 当我给出查询时改造 Url 更改