之前在 这篇博客中 (http://suichangkele.iteye.com/blog/2365868)写到了关于solr所使用的cache的统计信息的获取,但是他只在更新SolrIndexSearcher的时候才会触发,那么如何能随时的查看cache的使用情况呢?倒着推:如果要查找缓存的使用,必须获得SolrCore,获得SolrCore太简单了,任何一个Request都可以获得SorlCore,那么只要添加一个RequestHandler就可以了。我的代码如下:
public class CacheStatisticsRequestHandler extends RequestHandlerBase{ /**这四个参数分别对应solrconf.xml中的四个缓存的名字*/ public static final String filterCache_name = "filterCache"; public static final String queryResultCache_name = "queryResultCache"; public static final String documentCache_name = "documentCache"; public static final String fieldValueCache_name = "fieldValueCache"; private static final Logger logger = LoggerFactory.getLogger(CacheStatisticsRequestHandler.class); @Override public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception { logger.debug("参数是:" + req.getParams()); Map<String, SolrInfoMBean> info = req.getCore().getInfoRegistry(); rsp.add(CacheStatisticsRequestHandler.filterCache_name, info.get(CacheStatisticsRequestHandler.filterCache_name).getStatistics()); rsp.add(CacheStatisticsRequestHandler.queryResultCache_name, info.get(CacheStatisticsRequestHandler.queryResultCache_name).getStatistics()); rsp.add(CacheStatisticsRequestHandler.documentCache_name, info.get(CacheStatisticsRequestHandler.documentCache_name).getStatistics()); rsp.add(CacheStatisticsRequestHandler.fieldValueCache_name, info.get(CacheStatisticsRequestHandler.fieldValueCache_name).getStatistics()); } /**这个方法会自动的被调用,不用显示在构造方法中调用*/ @Override public void init(NamedList args) { super.init(args); logger.info("初始化" + this.getClass().getName() + "实例"); } @Override public String getDescription() { return null; } }
然后再solrconf.xml中配置一下就可以了
<requestHandler name="/cacheStats" class="com.comall.requestHandler.CacheStatisticsRequestHandler "> <!--自己定义的requestHandler--> </requestHandler>
然后在浏览器中访问一下这个requestHandler就可以了 。