之前在 这篇博客中 (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就可以了 。