我假设所有缓存的元素都在 DiskStore 中,并且您希望应用程序启动后它们就位于内存中。无论如何,使用 BootStrapCacheLoader 和 BootstrapCacheLoaderFactory 应该会有所帮助。
我只是给出应用程序启动后我们将 DiskStore 加载到内存中的想法
您可以实现 BootstrapCacheLoader ,它将加载缓存元素,如下所示。方法的定义BootstrapCacheLoader.load(Ehcache缓存) can be
//CustomBootstrapCacheLoader implements BootstrapCacheLoader
List<?> keys = cache.getKeys();
if ((keys == null) || keys.isEmpty())
{
return;
}
for (Object key : keys)
{
Element el = cache.getQuiet(key);
cache.removeQuiet(key);
cache.putQuiet(el);
}
上面的方法从 DiskCache 中读取元素,将其删除并将其放回原处,以便它保留在内存中,并且磁盘版本被删除。
实现 BootstrapCacheLoaderFactory 以便
public class CustomBootstrapCacheLoaderFactory extends BootstrapCacheLoaderFactor
{
.
.
@Override
public BootstrapCacheLoader createBootstrapCacheLoader(Properties properties)
{
CustomBootstrapCacheLoader loader = new CustomBootstrapCacheLoader();
loader.setAsynchronous(getAsyncFromProperty(properties));
return loader;
}
.
.
}
您可以使用 CustomBootstrapCacheLoaderFactory 定义缓存配置,如下所示
<cache
name="DummyCacheEl"
maxElementsInMemory="3500"
eternal="true"
overflowToDisk="false"
diskPersistent="true"
memoryStoreEvictionPolicy="LRU">
<bootstrapCacheLoaderFactory class="CustomBootstrapCacheLoaderFactory" properties="async=true"/>
</cache>