我使用Hibernate 4.1.7和EhCache作为二级缓存。我正在实施一项休息服务,以便根据需要清除cahce(驱逐所有地区)。
以下是代码段
org.hibernate.stat.Statistics statistics = HibernateUtil.getSessionFactory().getStatistics();
statistics.setStatisticsEnabled(true);
long hits = statistics.getSecondLevelCacheHitCount();
long misses = statistics.getSecondLevelCacheMissCount();
long puts = statistics.getSecondLevelCachePutCount();
logger.info("Hits: " + hits + " Misses: " + misses + " Puts:" + puts);
cache.evictEntityRegions();
hits = statistics.getSecondLevelCacheHitCount();
misses = statistics.getSecondLevelCacheMissCount();
puts = statistics.getSecondLevelCachePutCount();
logger.info("Hits: " + hits + " Misses: " + misses + " Puts:" + puts);
long hit0 = statistics.getQueryCacheHitCount();
long miss0 = statistics.getSecondLevelCacheMissCount();
不幸的是,在我驱逐所有区域之后,我得到了相同的命中/未命中值。
答案 0 :(得分:2)
这些计数具有以下含义:
这些统计信息不会为您提供缓存中的当前项目数。考虑到这一点,清除缓存不会影响这些数字。
如果您执行想要重置统计信息,请使用
statistics.clear()
但是如果你想检查缓存的实际大小,你可以使用
CacheManager.ALL_CACHE_MANAGERS.get(0).getCache("com.example.MyEntity").getSize();
请注意,每个实体都有自己的缓存,使用实体的完全限定类名命名。