读书人

模拟一个当地缓存统计缓存的命中率

发布时间: 2012-12-19 14:13:14 作者: rapoo

模拟一个本地缓存,统计缓存的命中率

为了测试线上服务,加缓存的效果,模拟了一个本地缓存,去测试一下加缓存后的命中率,代码如下:

?

?

import java.util.Date;import java.util.Random;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.Executor;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;/** * 统计任务,统计一下缓存的命中率 */public class StatTask {    public static Log logger = LogFactory.getLog("stat-cache");    public static AtomicInteger total = new AtomicInteger(0);    public static AtomicInteger cachedNum = new AtomicInteger(0);    public static ConcurrentHashMap<String, AtomicInteger> buffer = new ConcurrentHashMap<String, AtomicInteger>();    public static Executor executor = Executors.newFixedThreadPool(Runtime.getRuntime()            .availableProcessors() * 2);    public static void submit(final String url) {        executor.execute(new Runnable() {            @Override            public void run() {                try {                    logger.info("link:" + url);                    if (buffer.containsKey(url)) {                        int num = buffer.get(url).incrementAndGet();                        if (num % 10 == 0) {                            logger.warn(String.format("url:%s be cached %d", url, num));                        }                        cachedNum.incrementAndGet();                    } else {                        buffer.put(url, new AtomicInteger());                    }                    total.incrementAndGet();                    int cachedNumber = cachedNum.get();                    int totalNum = total.get();                    if (cachedNumber > 0 && cachedNumber % 100 == 0) {                        logger.warn(String.format(                                "cache hit %d and total:%d, 1.percentage of hits:%s", cachedNumber,                                totalNum, cachedNumber / (1.0 * totalNum)));                    }                } catch (Exception e) {                    logger.error("统计cache命中率计数器出错:" + e.getMessage());                }            }        });    }}

读书人网 >编程

热点推荐