Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 当缓存刷新时,ehCache能否返回旧的缓存值_Java_Spring_Caching_Ehcache - Fatal编程技术网

Java 当缓存刷新时,ehCache能否返回旧的缓存值

Java 当缓存刷新时,ehCache能否返回旧的缓存值,java,spring,caching,ehcache,Java,Spring,Caching,Ehcache,我正在使用Spring框架和JavaCXF服务 有几个客户端访问从数据库获取的固定数据列表。由于从数据库获取数据是一个昂贵的调用,而且数据库不会频繁更改,所以我认为缓存值是一件好事 数据库刷新->每天15次,间隔不定 缓存刷新->每15分钟一次 通过调用DB加载缓存需要15秒 现在,如果通过调用DB刷新缓存,则需要15秒。在这15秒内,如果客户端想要访问数据,我可以发送缓存中以前的数据。应用是可以容忍陈旧和过时的数据,而不是等待15秒(有一个delta函数,它在加载缓存后带来数据,这非常便宜)。

我正在使用Spring框架和JavaCXF服务

有几个客户端访问从数据库获取的固定数据列表。由于从数据库获取数据是一个昂贵的调用,而且数据库不会频繁更改,所以我认为缓存值是一件好事

数据库刷新->每天15次,间隔不定

缓存刷新->每15分钟一次

通过调用DB加载缓存需要15秒

现在,如果通过调用DB刷新缓存,则需要15秒。在这15秒内,如果客户端想要访问数据,我可以发送缓存中以前的数据。应用是可以容忍陈旧和过时的数据,而不是等待15秒(有一个delta函数,它在加载缓存后带来数据,这非常便宜)。ehcache中是否有一种方法可以在加载新数据的同时返回缓存中的旧数据,同时以15分钟的固定间隔刷新缓存?

本地磁盘上缓存的一致副本为业务需求提供了许多可能性,例如根据基于时间的需要使用不同的数据集,或者将数据集移动到不同的位置。它可以是具有快速读取性能的简单键值持久化机制,也可以是在读写操作期间具有内存速度的操作存储

Ehcache有一个RestartStore,它提供了快速可重启性和缓存持久性选项。RestartStore实现内存缓存的磁盘镜像。重新启动后,缓存中最后一个数据将自动从磁盘加载到RestartStore,从那里数据将可用于缓存

通过将子元素添加到缓存配置中来配置磁盘上的缓存持久性。子元素包括两个属性:strategy和synchronousWrites

<cache>
  <persistence strategy=”localRestartable|localTempSwap|none|distributed” synchronousWrites=”false|true”/>
</cache>

有关更多信息

  • 如果使用“cache-aside”模式,并且应用程序代码负责重新加载缓存数据,则在缓存过期之前,只要缓存保持映射,您就会完全观察到所需的行为
  • 如果使用带有缓存加载程序的“cache-through”模式,则无法获得这样的行为,即当重新加载映射时,它将锁定密钥,从而阻止试图同时访问它的其他线程