将EhCache磁盘库内容加载到内存中

如EhCache文档中所述:

实际上,这意味着持久的内存缓存将启动磁盘上的所有元素 。 […]因此,Ehcache设计在启动时不会将它们全部加载到内存中,而是根据需要懒洋洋地加载它们。

我想内存缓存启动将其所有元素都存储在内存中,我该如何实现呢?

原因是我们的网站对缓存执行了大量访问,因此我们第一次访问网站时响应时间非常短。

我假设所有缓存的元素都在DiskStore中,并且您希望它们在应用程序启动后立即在内存中。 在任何情况下使用BootStrapCacheLoader和BootstrapCacheLoaderFactory应该会有所帮助。

我只想知道在应用程序启动后我们将DiskStore加载到内存中的位置

您可以实现BootstrapCacheLoader,它将加载缓存元素,如下所示。 定义BootstrapCacheLoader.load(Ehcache缓存)方法即可

//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定义高速缓存配置,如下所示