Ehcache错过了统计数据和统计数据

时间:2014-02-21 14:47:16

标签: java caching ehcache terracotta

我为Ehcache配置了下一个:

<cache name="test-cache"
       maxEntriesLocalHeap="50"
       maxEntriesLocalDisk="50"
       eternal="false"
       diskSpoolBufferSizeMB="10"
       timeToIdleSeconds="90"
       timeToLiveSeconds="60"
       memoryStoreEvictionPolicy="LFU"
       transactionalMode="off">
    <persistence strategy="localTempSwap"/>
</cache>

以下使用它的代码:

    Ehcache cache = CacheManager.getInstance().getCache("test-cache");
    cache.setStatisticsEnabled(true);
    cache.setStatisticsAccuracy(Statistics.STATISTICS_ACCURACY_GUARANTEED);

    /* put 100 elements */
    for (int i = 1; i <= 100; i++) {
        cache.put(new Element("key-"+i, "value-"+i));
    }

    /* hit 100 elements in cache 10000 times */
    for (int i = 1; i <= 100; i++) {
        for (int j = 1; j <= 100 ; j++) {
            cache.get("key-"+j);
        }
    }

    /* consider values of misses, onDiskMisses, inMemoryMisses */
    System.out.println("Statistics = " + cache.getStatistics().toString());

我准备了一个简单的一流演示,你可以运行https://github.com/Bezuhlyi/ehcahce-statistics-test

你可以看到未命中!= inMemoryMisses + offHeapMisses + onDiskMisses

问题是实际上Statistics.getCacheMisses()的重要性是什么?

此外,自然缓存hitrate =命中/(命中+未命中)。那么了解Ehcache实例的实际命中率的正确方法是什么?

我没有在docs中找到任何有用的内容,也没有发现 SampledCacheStatistics 目的。

1 个答案:

答案 0 :(得分:0)

我可能应该阅读代码以确定,但我会说我认为从内存中发生的事情:缓存的缺失是无法找到映射的操作。 “等级”未命中的是每层的个人未命中。因此,如果始终在较低层中找到映射,那么您可能会有许多“堆层未命中”,而从不会出现单个缓存未命中。

现在我的回答可能会被您使用的Ehcache的确切版本所污染,但是将某些奇怪的东西放在一边,我希望这就是您所经历的。