gpt4 book ai didi

java - 获取磁盘持久化Ehcache数据的大小

转载 作者:行者123 更新时间:2023-12-02 02:37:37 25 4
gpt4 key购买 nike

当我的应用程序出现故障时,我使用 Ehcache 3.4 将一些数据保存到磁盘,并为磁盘持久性设置一些最大大小。Ehcache 文档中的示例:

PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(new File(getStoragePath(), "myData")))
.withCache("threeTieredCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10, EntryUnit.ENTRIES)
.offheap(1, MemoryUnit.MB)
.disk(20, MemoryUnit.MB, true)
)
).build(true);

我在 Ehcache 库中找不到用于返回磁盘持久数据当前大小的 API。有什么办法吗?当尺寸超过所需尺寸时会发生什么?

最佳答案

如果您请求 20MB,则磁盘空间将达到 20MB,然后将开始驱逐。

然后,要知道大小,总是要查看磁盘。

此外,还有一个非官方统计API。我所说的非官方的意思是内部的东西可能会改变或消失。但现在,它就在那里。您可以检索缓存的统计信息,然后检索底层的统计信息。

这是一个例子。请注意,实际占用的磁盘空间是否比分配的空间高一点。这是高于实际键/值存储的存储开销。

@Test
public void test() throws IOException {
StatisticsService statisticsService = new DefaultStatisticsService();

try(PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence("myData"))
.using(statisticsService)
.withCache("threeTieredCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10, EntryUnit.ENTRIES)
.offheap(1, MemoryUnit.MB)
.disk(20, MemoryUnit.MB, true)
)
).build(true)) {

Cache<Long, String> cache = persistentCacheManager.getCache("threeTieredCache", Long.class, String.class);
for(long i = 0; i < 1000; i++) {
cache.put(i, "test");
}
System.out.println("Length: " + getFolderSize("mydata"));
TierStatistics tierStatistics = statisticsService
.getCacheStatistics("threeTieredCache")
.getTierStatistics()
.get("Disk");
System.out.println("Occupied: " + tierStatistics.getOccupiedByteSize());
System.out.println("Allocated: " + tierStatistics.getAllocatedByteSize());
}
}

private long getFolderSize(String folder) throws IOException {
return Files.walk(Paths.get(folder))
.filter(p -> p.toFile().isFile())
.mapToLong(p -> p.toFile().length())
.sum();
}

关于java - 获取磁盘持久化Ehcache数据的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46053143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com