`
wensong
  • 浏览: 127426 次
  • 性别: 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());
                }
            }
        });
    }


}
分享到:
评论

相关推荐

    高速缓存命中率探究系统

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

    cache_code.rar_cache_cache命中率_cache映射_cache模拟_cache模拟器

    本文将详细介绍缓存的工作原理、缓存命中率、缓存映射方式以及如何通过模拟器进行模拟分析。 ### 1. 缓存命中率 缓存命中率是衡量缓存效率的重要指标,表示从缓存中成功获取数据的概率。如果处理器请求的数据已经...

    c2_3_编码缓存基本限制_

    1. **缓存容量与性能**:缓存大小直接影响了能够存储的数据量,从而影响缓存命中率。如果缓存容量有限,那么只有部分最热门的数据能够被存储,导致未命中的概率增加。图像可能展示了缓存容量与性能之间的非线性关系...

    体系结构实习-高速缓存模拟

    同时,为了便于测试和分析,还需要提供性能统计功能,如计算平均命中时间、命中率等。 这个实习项目不仅要求学生掌握高速缓存的基本概念,还要求他们能够将理论知识应用于实际编程,提升解决问题的能力。通过这样的...

    Android http缓存实现

    - 缓存命中率:通过合理的缓存策略提高缓存命中率,减少不必要的网络请求。 8. **测试与调试** - 使用HttpCacheTest类进行测试,可以模拟不同网络环境,检查缓存功能的正确性和效率。 通过上述技术,Android...

    用于模拟各种计算机缓存的Python程序.zip

    3. **缓存的命中率和miss率**:衡量缓存性能的重要指标,命中率表示成功从缓存中获取数据的次数占总请求次数的比例,miss率则是未命中次数的比例。 4. **缓存的写策略**:写操作如何影响缓存,有写直达、写回、写...

    本地缓存(一)ehcache/jcs/cache4j/jcs的性能测试与使用场景分析

    性能测试通常会关注缓存的存取速度、内存占用、缓存命中率等指标。在对比Ehcache、JCS和Cache4j时,可以通过模拟大量并发请求,观察它们在高负载下的表现。例如,可以创建一个测试用例代码,生成不同数量的并发线程...

    随机缓存探究系统

    在缓存系统中,反馈控制可能意味着监控缓存的命中率或空闲空间,然后根据这些信息动态调整缓存策略,比如调整哪些数据应该被缓存,以及缓存的时间长度。 标签中的"py"表示该项目使用Python编程语言实现。Python是IT...

    SC超级缓存设置教程和工具

    4. **监控与优化**:启用日志记录,持续监控缓存命中率、内存占用等指标,以便及时发现并解决问题,不断优化缓存性能。 四、SC超级缓存工具介绍 本压缩包可能包含以下组件: 1. **配置工具**:用于创建和编辑SC...

    先进先出缓存算法

    通过循环执行10000000次随机访问,统计缓存命中率,并计算总的执行时间,可以直观地看出算法的实际性能表现。 #### 总结与改进方向 尽管FIFO算法因其实现简单而易于理解,但在现代高性能计算环境中,它可能不是...

    外文翻译--基于网络爬虫的有效URL缓存.doc

    通过对实际日志数据的模拟,作者得出了结论:缓存可以极大地提高爬虫的效率,一个大约50,000个条目的缓存可以达到80%的命中率。 知识点1:爬虫算法 爬虫算法是指从互联网上抓取数据的过程。基本算法包括:(a)抓取...

    Cachelab3实验日志.docx

    3. csim 模拟器:csim 模拟器是指一个缓存模拟器,用于模拟缓存的行为。 4. 缓存跟踪:缓存跟踪是指记录缓存的行为,以便于分析缓存的性能。 5. 命中率:命中率是指缓存中有多少数据能够命中的比例。 6. 不命中率:...

    高速缓存仿真软件

    "高速缓存仿真软件"是一个专门用于模拟和研究Cache工作原理的工具,它可以帮助用户理解不同类型的Cache配置如何影响系统性能。下面将详细介绍Cache的工作机制以及该软件可能涉及的功能。 1. **Cache的工作原理** -...

    采用GPU的提升纹理缓存命中光线投射方法.pdf

    对于基于GPU(图形处理器)的光线投射,提高纹理缓存命中率是提升渲染性能的关键。本文由杜松江和张思超两位作者提出了一种新的方法,旨在改善GPU的纹理缓存命中率,从而提高光线投射的效率。 首先,理解GPU中的三...

    基于模版方法的简单缓存功功能

    6. **缓存的性能监控**:如何通过日志、监控工具(如JMX)来跟踪缓存的命中率、大小、清除频率等指标。 7. **异常处理**:处理可能的并发冲突、数据过期、内存溢出等问题。 8. **测试与调试**:编写单元测试以确保...

    缓存VHDL设计

    在本主题中,“缓存VHDL设计”将探讨如何使用VHDL来设计和模拟一个简单的缓存系统。 **1. 缓存的基本原理** 缓存的工作基于局部性原理,即程序执行时,连续的指令和数据往往倾向于集中在同一块内存区域。当CPU需要...

    存贮层次模拟器(命中率的实验原代码)

    本实验代码通过模拟简单的FIFO缓存替换策略,展示了如何在给定一组数据访问序列的情况下,计算缓存命中率的过程。通过对代码的分析可知,当请求序列中出现的数据块不在缓存中时,系统会根据FIFO原则替换掉缓存中的...

    计算机组成原理 存储器 缓存器

    首先,存储器是计算机系统中的一个重要组成部分,它负责存储程序和数据。根据访问速度和容量,存储器可以分为多个层次,包括寄存器、高速缓存(Cache)、主存(RAM)和辅助存储器(如硬盘)。寄存器是最快的存储设备...

Global site tag (gtag.js) - Google Analytics