Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取磁盘缓存数据的大小_Java_Ehcache - Fatal编程技术网

Java 获取磁盘缓存数据的大小

Java 获取磁盘缓存数据的大小,java,ehcache,Java,Ehcache,我正在使用Ehcache 3.4在我的应用程序停止运行时将一些数据持久化到磁盘,并为磁盘持久化设置一些最大大小。 Ehcache文档中的示例: PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder() .with(CacheManagerBuilder.persistence(new File(getStoragePath(), "myData"))) .withCa

我正在使用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();
}
@测试
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();
}

我所需要的正是我所需要的