【问题标题】:Caching the entire table缓存整个表
【发布时间】:2016-07-26 19:38:57
【问题描述】:

我们有一个 spring boot web 服务(带有 spring 数据,hibernate),它通过从数据库中读取整个表并返回它来生成一个巨大的文件。这样做需要很多时间,这比客户设置的超时时间要长得多。所以我决定使用 ehcache 来缓存整个表的数据并从中生成文件(我知道缓存不是为此而设计的,但我没有任何其他想法)。它的表现令人满意。但是当我们需要对数据进行更新时,问题就来了。更新在每个记录级别进行,但缓存存储在整个表级别。我不确定如何让 ehcache 查看缓存对象中的记录并修改它们(由于某些性能原因,我不想将每一行存储为单独的缓存对象)。非常感谢您对此提供任何帮助。

现在,为了解决这个问题,我摆脱了 ehcache 并使用了哈希映射。这导致了很多我不喜欢的样板代码。

编辑:有没有办法连接到 ehcache 驱逐机制并手动更改缓存对象?

【问题讨论】:

  • 你是如何应用缓存的,你是使用Spring Cache还是使用了hibernate的二级缓存选项。

标签: java spring hibernate caching ehcache


【解决方案1】:

在 ehcache.xml 中使用参数 timeToLiveSeconds 可以指定数据在缓存中的时间。一种选择是提供一个时间(例如,24 小时),因此这段时间的数据将在缓存中,并且在下一次方法调用时将被刷新。

为了避免客户端做这个调用(因为耗时),可以做一个Spring定时任务来定时调用这个,这样缓存会周期性的刷新。

另一种方法是在您调用特定函数进行更改时强制刷新缓存。所以你可以移除缓存,然后再次调用该方法重新充电缓存中的数据。在这个链接中被告知如何删除缓存以强制刷新:http://forum.spring.io/forum/spring-projects/data/55466-how-to-force-ehcache-to-refresh

【讨论】:

  • 我想我不清楚时间部分。我不能每 5 分钟左右重新加载整个数据。该文件需要每五分钟生成一次,并且数据需要是最新的。
  • 我想我不太理解你的问题。正如我所说,缓存只会在您指定的时间(f.d. 24 小时)之后重新加载,或者在您更新数据时手动重新加载。显然,如果数据库中的数据每 5 分钟更新一次,它就不再是一个有效的解决方案了
猜你喜欢
  • 2011-10-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 2014-02-23
  • 2018-11-23
  • 2015-04-27
相关资源
最近更新 更多