gpt4 book ai didi

spring - JCache CacheStatistic 是缓存大小

转载 作者:行者123 更新时间:2023-12-04 15:44:56 24 4
gpt4 key购买 nike

我使用了 JCache 和 EhCache 作为提供者。使用 MBean,我能够获得缓存统计信息,但缺少诸如缓存大小之类的属性。我看到 LiveCacheStatistics 提供了它,但是如何从 JCache 获取它的实例

List<Map<String,Object>> cacheStatasticsList = new ArrayList<>();

try {
final MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();

final Set<ObjectInstance> cacheBeans = beanServer.queryMBeans(ObjectName.getInstance("javax.cache:type=CacheStatistics,CacheManager=*,Cache=*"), null);

for (ObjectInstance cacheBean : cacheBeans) {
final CacheStatisticsMXBean cacheStatisticsMXBean =
MBeanServerInvocationHandler.newProxyInstance(beanServer, cacheBean.getObjectName(), CacheStatisticsMXBean.class, false);

Map<String,Object> cacheStatasticsMap = new HashMap<>();
cacheStatasticsMap.put("Name",cacheBean.getObjectName().getKeyProperty("Cache"));
cacheStatasticsMap.put("Gets",cacheStatisticsMXBean.getCacheGets());
cacheStatasticsMap.put("Hits",cacheStatisticsMXBean.getCacheHits());
cacheStatasticsMap.put("Misses",cacheStatisticsMXBean.getCacheMisses());
cacheStatasticsMap.put("Removals",cacheStatisticsMXBean.getCacheRemovals());
cacheStatasticsMap.put("Evictions", cacheStatisticsMXBean.getCacheEvictions());
cacheStatasticsMap.put("AvgGetTime", cacheStatisticsMXBean.getAverageGetTime());
cacheStatasticsMap.put("AvgPutTime", cacheStatisticsMXBean.getAveragePutTime());
cacheStatasticsMap.put("AvgRemoveTime" , cacheStatisticsMXBean.getAverageRemoveTime());
cacheStatasticsList.add(cacheStatasticsMap);
}

} catch(Exception e){
log.error("Error in getting cache statistics.");
return cacheStatasticsList;
}
return cacheStatasticsList;

最佳答案

不幸的是,JSR107 标准没有在统计对象中定义大小。请参阅:CacheStatisticsMXBean

我从与专家组和规范负责人的讨论以及我作为缓存实现者的经验中记忆起的一些原因:

  • 对于分布式缓存,很难确定大小。可能需要调用其他节点,并且该值可能只是一个估计值
  • JSR107 标准也省略了指定大小限制。这是因为一些实现指定条目数,一些使用字节。因此,统计数据中可能也遗漏了“大小的概念”
  • 如果定义了过期时间,缓存大小可能意味着不同的事情:尚未过期的条目数,缓存中占用内存的条目数。最合乎逻辑的措施是“条目未过期”。但是,某些缓存实现会在返回统计信息之前检查过期的条目

尽管统计数据中缺少尺寸非常痛苦,但有理由不将其包括在内。现在可用的指标只是从计数器中读出的。根据实现情况,要得出大小,需要进行一些更繁重的操作。

关于spring - JCache CacheStatistic 是缓存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56282547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com