模拟缓存命中率计算

╰+哭是因爲堅強的太久メ 2023-10-05 17:17 76阅读 0赞

原题目出处来自这个大佬空间:https://blog.csdn.net/feinifi/article/details/94464696

也是无意中看到,兴趣来了,就想自己也来实现一下

题目:

  1. 假设有这样的缓存,如果get到数据返回成功,如果没有get到数据,那么返回失败,不管能否get到数据,总是会把
  2. 最新的记录加入缓存,同时缓存有个大小限制,可以无限添加,但是都会把前面的数据挤掉。如果给出缓存大小,
  3. 并给出一个查询的列表,用程序模拟这个过程,并求出缓存命中失败的次数。
  4. 比如,输入:int size=4,int[] data={1,2,3,4,3,5,3,2,1,5,4}
  5. 输出:8

分析:

按照题目的意思,出列规则为先进先出,显然可以用队列来实现这个模拟缓存操作,如果是后进先出则可以用stack栈来实现

话不多说,直接上代码

  1. import java.util.LinkedList;
  2. import java.util.Queue;
  3. /**
  4. * @author wh445306
  5. * @version 1.0
  6. * @Desciption:CacheTest:缓存命中率计算测试题
  7. * @date 2021-01-06 19:21
  8. */
  9. public class CacheTest {
  10. public static void main(String[] args) {
  11. int size=4;
  12. int iCount=0;
  13. int[] data={1,2,3,4,3,5,3,2,1,5,4};
  14. Queue<Integer> queue = new LinkedList<>();
  15. for (int i=0; i<data.length;i++) {
  16. iCount +=queue.contains(data[i]) ? 1:0;
  17. if (queue.size() >= size) {
  18. queue.remove();
  19. queue.add(data[i]);
  20. } else {
  21. queue.add(data[i]);
  22. }
  23. }
  24. //遍历队列
  25. for(int q : queue){
  26. System.out.println(q);
  27. }
  28. System.out.printf("缓存命中次数:%d 命中率为:%6.2f%% \n",iCount,(double)iCount/data.length*100);
  29. System.out.printf("缓存失败次数:%d 失败率为:%6.2f%% \n",data.length-iCount,(double)(data.length-iCount)/data.length*100);
  30. }
  31. }

执行效果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3doNDQ1MzA2_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ehcache3计算命中率

    ehcache3可以使用缓存命中率来衡量缓存的效率。命中率是指在缓存中查找所需数据时找到的比例。 计算命中率的公式如下: 命中率 = (命中次数 / 查询总次数) x 10