Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缓存整个表_Java_Spring_Hibernate_Caching_Ehcache - Fatal编程技术网

Java 缓存整个表

Java 缓存整个表,java,spring,hibernate,caching,ehcache,Java,Spring,Hibernate,Caching,Ehcache,我们有一个SpringBootWeb服务(带有SpringData,hibernate),它通过从数据库读取整个表并返回来生成一个巨大的文件。这样做需要很多时间,这比客户端设置的超时时间要多得多。所以我决定使用ehcache来缓存整个表的数据并从中生成文件(我知道cache不是为这个设计的,但我没有其他想法)。它的性能令人满意。但当我们需要对数据进行更新时,问题就来了。更新是按记录级别进行的,但缓存存储在整个表级别。我不知道如何让ehcache查看缓存对象中的记录并修改它们(由于某些性能原因,我

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

现在,为了管理这个,我去掉了ehcache并使用了散列映射。这导致了很多我不喜欢的锅炉铭牌代码


编辑:是否有方法连接到ehcache逐出机制并手动更改缓存对象?

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

为了避免客户机执行此调用(因为所花费的时间),您可以让Spring计划的任务以相同的周期调用此调用,这样缓存将定期刷新


另一种方法是在调用特定函数进行更改时强制刷新缓存。因此,您可以删除缓存,然后再次调用该方法以对缓存中的数据重新充电。在该链接中,将告诉您如何删除缓存以强制刷新:

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

为了避免客户机执行此调用(因为所花费的时间),您可以让Spring计划的任务以相同的周期调用此调用,这样缓存将定期刷新


另一种方法是在调用特定函数进行更改时强制刷新缓存。因此,您可以删除缓存,然后再次调用该方法以对缓存中的数据重新充电。在这个链接中,我被告知如何删除缓存以强制刷新:

我想我不清楚时间部分。我不能每隔5分钟左右重新加载整个数据。文件需要每五分钟生成一次,数据必须是最新的。我想我不太理解你的问题。正如我所说,缓存只会在您指定的时间(f.d.24小时)后重新加载,或者在您更新数据时手动加载。显然,如果数据库中的数据每5分钟更新一次,这将不再是一个有效的解决方案。我想我不清楚时间部分。我不能每隔5分钟左右重新加载整个数据。文件需要每五分钟生成一次,数据必须是最新的。我想我不太理解你的问题。正如我所说,缓存只会在您指定的时间(f.d.24小时)后重新加载,或者在您更新数据时手动加载。显然,如果数据库中的数据每5分钟更新一次,它将不再是一个有效的解决方案。您是如何应用缓存、使用Spring缓存还是使用hibernate的二级缓存选项的。您是如何应用缓存、使用Spring缓存还是使用hibernate的二级缓存选项的。