我为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 目的。
答案 0 :(得分:0)
我可能应该阅读代码以确定,但我会说我认为从内存中发生的事情:缓存的缺失是无法找到映射的操作。 “等级”未命中的是每层的个人未命中。因此,如果始终在较低层中找到映射,那么您可能会有许多“堆层未命中”,而从不会出现单个缓存未命中。
现在我的回答可能会被您使用的Ehcache的确切版本所污染,但是将某些奇怪的东西放在一边,我希望这就是您所经历的。