`
wensong
  • 浏览: 125276 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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

 

 

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());
                }
            }
        });
    }


}
分享到:
评论

相关推荐

    高速缓存命中率探究系统

    缓存命中率是指,在查找前台缓存时,因为前台缓存是高速缓存,内存小,所以存在着找不到的情况!找不到某个项目的话,就要到后台查找,查找到并返回给用户,并在前台缓存中留一份!!! 这个系统探究的就是,高速...

    Web缓存容量的优化技术研究

    针对安装缓存时的代价问题,从缓存的存储代价和未命中代价之间的平衡考虑,通过数据建模的方法,...通过模拟试验表明,该模型可以有效的确定一个最佳缓存容量,在保证较好命中率和字节命中率的前提下使缓存的代价最小。

    智慧标识网络中基于族群协作的缓存机制

    通过自主研发的实验床模拟系统EmuStack,对C2Cache进行了性能分析与评估,实验结果表明,对比LCE、Random、ProbCache、LCD和Greedy主流缓存机制,C2Cache可有效提高缓存命中率,从而大幅度降低平均访问时延。...

    ring_cache:模拟环形缓冲区的内存中高速缓存

    环形缓存RingCache是​​一种模拟环形缓冲区的内存高速缓存,其中旧元素被逐出以为新元素腾出空间。 在不值得或不可能将所有访问的数据保留在内存中,并且某些元素比其他元素更频繁地访问的情况下,它最有用。 作为...

    通过协作式网络内缓存请求路由以优化带宽:一种方法

    为了解决这个问题,我们建立了一个分布式网络内缓存模型,用于在CCN中制定内容放置和请求路由,旨在最大程度地减少带宽成本以及严格的存储和带宽限制。 基于提出的模型,我们设计了可扩展的,自适应的和低复杂度的...

    超节点P2P网络中一种有效的缓存策略

    针对超节点P2P系统的特点,提出了一种有效且灵活的缓存策略。该策略使用文件价值来...最后通过Trace-Driven的方法模拟实验,结果表明,与现有的缓存策略LRU和LFU相比,这种缓存策略具有较好的缓存命中率和字节命中率。

    一种方法并不适合所有人:通过偏好驱动的 Web 缓存提高网络 Qos-研究论文

    使用跟踪驱动的模拟,我们为服务器实现了一个激励兼容的基于市场的 Web 缓存,以将内容推送到缓存中。 该系统分散了缓存过程,因为服务器以竞价缓存空间的形式提供信息。 从服务器获得关于对象估价和命中率预测的...

    Web 缓存的有偏见的替换策略:差异化的服务质量和聚合用户价值-研究论文

    通过跟踪驱动的模拟,我们表明在关于服务器估值的特定假设下,我们的算法提供了合理的 QoS 关系:值命中率越高的服务器的字节命中率越高。 我们进一步采用经济观点,即系统用户收到的价值是比命中率或字节命中率更...

    computer_architecture_ex2

    计算机架构实验2 2020/04/12 伊利亚·扎卡9289 艾瑟夫·金索斯图图... 模拟毫秒消费物价指数数据缓存未命中率指令缓存未命中率L2缓存未命中率邮编160.703 1.607035 0.014133 0.000076 0.294739 壮观的118.547 1.18546

    cache-visualization

    缓存可视化 CS351 的最终项目。规格20 分:幻灯片(与同学的规则相同,但如果你选择幻灯片可能会稍微多一些) 80 分:功能和附加文档 文档: 一个自述文件... 模拟应该显示每个缓存的命中率。 如果实现了访问时间功能,

    Python Cookbook

    10.5 统计Apache的客户缓存的命中率 378 10.6 在脚本中调用编辑器 379 10.7 备份文件 381 10.8 选择性地复制邮箱文件 383 10.9 通过邮箱创建一个邮件地址的白名单 384 10.10 阻塞重复邮件 386 10.11 检查你的...

    一种高效的页面级FTL,可优化闪存中的地址转换

    受模型的启发,我们进一步设计了工作负载自适应的加载策略,并结合了有效的替换策略,以提高缓存命中率并减少替换的脏条目的回写。最后,我们使用广泛的跟踪驱动模拟来评估TPFTL。我们的评估结果表明,与最新的FTL...

    PWLRU: 一种面向闪存数据库的缓冲区存取算法 (2010年)

    针对现有缓冲区替换算法无法...实验选用基于MYSQL的TPC-C测试标准作为模拟仿真环境,实验结果证明:PWLRu不仅能保证缓存命中率不低于经典的最近最少使用替换算法(LRu),而且在闪存上的IO平均读取代价和能耗均优于LRU

    400电话办理选号系统

    内置Memcache数据库缓存技术,查询命中率在60%左右,降低数据库负担,提升查询效率,具体PHP+MYSQL+MEMCACHE配置请见该文档文末。 二、程序目录结构: |400.php ---号码类别数组存储文件 |400dianhua数据库.sql...

Global site tag (gtag.js) - Google Analytics