是的,使用Ehcache,您可以配置缓存并仅通过Java代码检索其大小(无XML配置)。集成一切的确切方法取决于您的特定架构;我将假设泽西做API和Guice用于依赖注入。
定义缓存
通过依赖注入使缓存管理器可用。这可以通过Guice模块完成:
@Provides
@Singleton
CacheManager provideCacheManager() {
CacheManager cacheManager = CacheManager.create();
/* very basic cache configuration */
CacheConfiguration config = new CacheConfiguration("mycache", 100)
.timeToLiveSeconds(60)
.timeToIdleSeconds(30)
.statistics(true);
Cache myCache = new Cache(config);
cacheManager.addCacheIfAbsent(myCache);
return cacheManager;
}
请注意,mycache已启用统计信息。
同样,使用缓存可以完全用Java代码完成,但取决于您的架构和设计。通常我使用方法拦截(通过AOP)来做这个,但这是另一个主题。
通过REST API获取缓存统计信息
鉴于您的CacheManager可通过依赖注入获得,您可以将其连接到REST端点并允许访问缓存统计信息:
@Path("stats")
@Produces("text/plain")
public class StatsResource {
@Inject private CacheManager cacheManager;
@GET
public String stats() {
StringBuffer sb = StringBuffer();
/* get stats for all known caches */
for (String name : cacheManager.getCacheNames()) {
Cache cache = cacheManager.getCache(name);
Statistics stats = cache.getStatistics();
sb.append(String.format("%s: %s objects, %s hits, %s misses\n",
name,
stats.getObjectCount(),
stats.getCacheHits(),
stats.getCacheMisses()
));
}
return sb.toString();
}
}
现在,您可以通过REST调用获取有关缓存的信息:
GET /stats
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
mycache: 8 objects, 59 hits, 12 misses
JMX怎么样?
Ehcache可以轻松地将缓存管理器注册到MBean服务器。它可以用Java代码完成。更新您的Guice模块,将cacheManager注册到系统MBeanServer:
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ManagementService.registerMBeans(cacheManager, mBeanServer, false, false, false, true);
现在,您可以将JConsole附加到Java进程,并在MBean net.sf.ehcache.CacheStatistics中查找缓存统计信息。