如EhCache留档所述:
实际上,这意味着持久性内存中缓存将启动,其所有元素都将在磁盘上。[...]因此,Ehcache设计不会在启动时将它们全部加载到内存中,而是根据需要懒惰地加载它们。
我希望内存缓存启动时将所有元素都存储在内存中,我该如何实现?
这是因为我们的网站对缓存执行了大量的访问,所以我们第一次访问网站时,它的响应时间非常长。
我假设所有缓存的元素都在DiskStore中,您希望应用程序一启动,它们就在内存中。在任何情况下,使用BootStrapCacheLoader和Bootstrap CacheLoaderFactory都会有所帮助。
我只是给出了在应用程序启动后将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定义缓存配置,如下所示
<cache
name="DummyCacheEl"
maxElementsInMemory="3500"
eternal="true"
overflowToDisk="false"
diskPersistent="true"
memoryStoreEvictionPolicy="LRU">
<bootstrapCacheLoaderFactory class="CustomBootstrapCacheLoaderFactory" properties="async=true"/>
</cache>
问题内容: 我有一个长度为2.2亿(固定)的int和float数组。现在,我想将这些阵列存储到内存和磁盘/从内存和磁盘上载。目前,我正在使用Java NIO的FileChannel和MappedByteBuffer解决此问题。它可以正常工作,但大约需要5秒钟(Wall Clock Time)(用于将阵列存储到内存或从内存上载到磁盘或从磁盘上载到磁盘)。实际上,我想要一个更快的。有人可以帮我吗,有没
我想结合内存和磁盘缓存使用EhCache。当内存已满时,EhCache应将新元素移动到磁盘。e、 g.我在ehCache内存存储中有100个元素,并尝试放入第101个元素,如果内存已满,则将第101个单元放入磁盘,而不是第一个单元。 你能让我知道实现这一点的缓存配置吗?
问题内容: 我正在使用具有磁盘存储持久性的缓存。在随后重新运行该应用程序时,出现以下错误: 除了在应用程序中的某个位置显式调用之外,还有什么方法可以解决此问题? 缓存配置: 复制问题的代码: 问题答案: 尝试设置系统属性: net.sf.ehcache.enableShutdownHook = true 因此,您可以在程序的开头添加以下行: 或者,从命令行传递属性: 注意,ehcache网站在使用
在服务器重置缓存数据保存在磁盘存储后。但在服务器启动后不使用缓存数据。所以我想加载磁盘存储内容到memory.How做到这一点?在这个堆栈问题加载EhCache磁盘存储内容到内存中使用BootstrapCacheLoaderFactory但不为我出现。
我们在应用程序中使用ehcache。请看以下配置: 既然我们已经配置为eternal="true ",那么它会永远创建缓存吗?。磁盘空间有可能用完吗? 对磁盘存储的性能会有什么影响?。肯定比内存缓存慢,但是影响有多大。 如果磁盘中存储了更多缓存,是否会导致执行多个文件操作的IO问题? 请建议生产级应用的最佳实践。假设我们有一个3 GB的堆内存和25000个并发用户访问应用程序。但是,我们的应用程序
细节 Linux 中,设备用/dev/目录下的文件表示。例如 /dev/hda1 第一块硬盘的第一主分区 /dev/hdb5 第二块硬盘的第一逻辑分区 /dev/sda4 第一块 SATA 硬盘的第四主分区,或者扩展分区 /dev/null 黑洞设备 关于磁盘设备,详见“分区概念”一节 mount 设备文件 [挂载路径] 挂载文件系统 -t 指定文件系统的类型 通常不必指定,mount 自