2011-10-31 101 views
1

我正在尝试编写一个可以追踪所有Ehcache GET请求的类。对于痴迷的性能 - 这只会出于调试目的而打开。记录Ehcache获取请求

我可以看到以下三个选项可供选择:

1)写的net.sf.ehcache.event.CacheEventListener的实现。这将是我的首选方式,但它只有PUT/REMOVE /等。挂钩。没有GET。卫生署!

2)写的net.sf.ehcache.statistics.CacheUsageListener的实现。这种方法的问题在于,这个接口更多的是为统计而设计,甚至不提供对当前缓存键/元素等东西的访问,所以我将不得不通过ThreadLocal做出糟糕的黑客行为来实现我想要的。呸!

3)写的Ehcache包装,并通过它信道的所有请求。非常痛苦,因为我们以不同的方式使用Ehcache(使用Hibernate和不使用Ehcache),这意味着我必须为所有这些不同的情况编写不同的包装。增加维护的难度,并不是很精确,因为不可能知道,例如,GET操作是否已经命中了一个陈旧的条目。

我错过了其他选择吗?

回答

1

第四个选项是为net.sf.ehcache.Cache 启用调试级别日志记录为要追踪信息的缓存启用缓存统计信息。 然后,你会得到“缓存:”+ getName()+“存储命中”+键“或”configuration.getName()+“缓存命中,但元素过期”“日志语句...所以对于未命中。

+0

有趣的建议,但不幸的是还不够好。这种方法的问题是,它有时会很难(如果不是不可能的)两个日志线相互连接,尤其是如果有很多其他的高速缓存活动正在进行 – mindas

+0

不知道你的意思是把两条线连在一起,什么样的日志线?有线程ID在那里?还是其他的东西? –

+0

如果我按照你的意见,我会得到两个日志行 - 一个来自网络。 sf.ehcache.Cache,另一个来自缓存统计类,如果有很多其他的缓存活动,匹配这两个日志行可能会很困难,如果我得到了你的建议,请纠正我错了。 – mindas