Java 获取磁盘缓存数据的大小
我正在使用Ehcache 3.4在我的应用程序停止运行时将一些数据持久化到磁盘,并为磁盘持久化设置一些最大大小。 Ehcache文档中的示例:Java 获取磁盘缓存数据的大小,java,ehcache,Java,Ehcache,我正在使用Ehcache 3.4在我的应用程序停止运行时将一些数据持久化到磁盘,并为磁盘持久化设置一些最大大小。 Ehcache文档中的示例: PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder() .with(CacheManagerBuilder.persistence(new File(getStoragePath(), "myData"))) .withCa
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();
}
@测试
public void test()引发IOException{
统计服务统计服务=新的默认统计服务();
try(PersistentCacheManager PersistentCacheManager=CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(“myData”))
.使用(统计服务)
.withCache(“三层缓存”,
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class、String.class、,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10,EntryUnit.ENTRIES)
.offheap(1,MemoryUnit.MB)
.disk(20,MemoryUnit.MB,true)
)
).build(正确)){
Cache Cache=persistentCacheManager.getCache(“三层缓存”,Long.class,String.class);
用于(长i=0;i<1000;i++){
cache.put(i,“测试”);
}
System.out.println(“长度:”+getFolderSize(“mydata”);
分层统计分层统计=统计服务
.getCacheStatistics(“三层缓存”)
.getTierStatistics()
。获取(“磁盘”);
System.out.println(“占用:+tierStatistics.getOccuppiedByteSize());
System.out.println(“已分配:+tierStatistics.getAllocatedByteSize());
}
}
私有长getFolderSize(字符串文件夹)引发IOException{
返回文件.walk(路径.get(文件夹))
.filter(p->p.toFile().isFile())
.mapToLong(p->p.toFile().length())
.sum();
}
如果要求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();
}
@测试
public void test()引发IOException{
统计服务统计服务=新的默认统计服务();
try(PersistentCacheManager PersistentCacheManager=CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(“myData”))
.使用(统计服务)
.withCache(“三层缓存”,
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class、String.class、,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10,EntryUnit.ENTRIES)
.offheap(1,MemoryUnit.MB)
.disk(20,MemoryUnit.MB,true)
)
).build(正确)){
Cache Cache=persistentCacheManager.getCache(“三层缓存”,Long.class,String.class);
用于(长i=0;i<1000;i++){
cache.put(i,“测试”);
}
System.out.println(“长度:”+getFolderSize(“mydata”);
分层统计分层统计=统计服务
.getCacheStatistics(“三层缓存”)
.getTierStatistics()
。获取(“磁盘”);
System.out.println(“占用:+tierStatistics.getOccuppiedByteSize());
System.out.println(“已分配:+tierStatistics.getAllocatedByteSize());
}
}
私有长getFolderSize(字符串文件夹)引发IOException{
返回文件.walk(路径.get(文件夹))
.filter(p->p.toFile().isFile())
.mapToLong(p->p.toFile().length())
.sum();
}
我所需要的正是我所需要的