`
futrueboy
  • 浏览: 84739 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

简单Cache设计

阅读更多

 

Cache问题,淘宝用户数据比较多,每次用户来讲问,需要仅数据库取得用户信息,为了提高速度,在内存中缓存用户数据,设计算法,Cache满的时候需要删除很久没有使用的数据。

 

 

 

import java.util.ArrayList;
import java.util.HashMap;



public class Resolve {
    HashMap cache = new HashMap();
    ArrayList<Integer> list = new ArrayList<Integer>();
	
    
    int index = 0;
    int rear = 0;
    int cacheSize = 3;

    
    /**
     * 
     * @param id
     * @param data
     * return void
     *eg. 1, 2, 3, 4, 5, 1, 2, 5, 1, 2
     *                      |        |
     *                  index     rear
     */
    
	private void addToCache(int id, String data) {
		rear++;
	   /**
		 * 如果在hashmap中不存在该数据,若当前小于Cache容量还足够
	     * 则往里直接添加数据,否则通过index获得最近没有使用的ID(index总是
	     * 指向最后一个没有使用的ID)然后通过id把hashmap中该数据删除
	     * 
	     *  
	     */
		if (!cache.containsKey(id)) {
			if (rear > cacheSize) {
				int oldID = list.get(index);
				cache.remove(oldID);
			}
			cache.put(id, data);
		}
		list.add(id);
		
	   /** 如果在hashmap中存在该数据,则最后的rear指针要加一,而index指针要
	     * 找一个与当前id不一样的ID(因为可能会有连续的相同的ID)假设Cache为3,如下:
	     *  1, 2, 3, 4, 5, 1, 2, 2, 2, 5, 1, 2
	     *                    |              |
	     *                  index           rear
	     *  则需要找到5才停下
	     */
		if (rear > cacheSize)
			while(list.get(++index) == id);
		
		for (int i = index; i < rear; i++) {
			System.out.print(list.get(i) + " ");
		}
		System.out.println();
		
		
		System.out.println(cache);
		System.out.println();
	}
	
	
	
	
	
	public static void main(String argv[]) {
      int[] lru = new int[]{1, 2, 3, 4, 5, 1, 2, 5, 1, 2, 3, 4, 5};
      
      String data = "data";
      Resolve r = new Resolve();
      
      r.addToCache(1, data);
      r.addToCache(2, data);
      r.addToCache(3, data);
      r.addToCache(4, data);
      r.addToCache(5, data);
      r.addToCache(1, data);
      r.addToCache(2, data);
      r.addToCache(5, data);
      r.addToCache(1, data);
      r.addToCache(2, data);
      r.addToCache(3, data);
      r.addToCache(4, data);
      r.addToCache(5, data);
      
      
      
//      cache.put(, value)
      
   }
}
分享到:
评论

相关推荐

    计算机组成原理2021-直接相联Cache设计作业1

    《计算机组成原理2021-直接相联Cache设计作业1》是一门针对深圳地区2021年春季学期开设的计算机组成原理实验课程的一部分,旨在让学生深入理解并实际操作直接相联Cache的设计。该实验属于综合设计型,旨在通过实践来...

    头歌计算机组成原理2路组相联cache设计

    2路组相联Cache设计是一种常见的Cache组织方式,它在提升数据存取效率的同时,兼顾了存储空间和成本的有效利用。本文将深入探讨2路组相联Cache的设计原理、工作机制以及其在计算机组成中的重要性。 2路组相联Cache...

    直接相联Cache设计_计算机组成原理_实验报告.docx

    直接相联映射Cache是一种常见的高速缓存设计方式,它在计算机系统中起着至关重要的作用,用于提高CPU访问主存的速度。本实验报告详细介绍了如何设计一个直接相联映射Cache,包括其基本概念、设计要求、方案设计、...

    IOS Cache设计详细介绍及简单示例

    IOS Cache设计 Cache的设计是个基础计算机理论,也是程序员的重要基本功之一。Cache几乎无处不在,CPU的L1 L2 Cache,iOS系统的clean page和dirty page机制,HTTP的tag机制等,这些背后都是Cache设计思想的应用。 为...

    第5关:直接相联cache设计.txt

    第5关:直接相联cache设计 本设计是关于直接相联高速缓存(cache)的设计,采用Logisim软件进行实现。在本电路设计中,我们将构建一个简单的直接相联cache,以展示数据如何被存储和检索的过程。 ### 直接相联高速...

    logisim全相联cache设计.txt

    根据提供的文件信息,我们可以推断出这是一份用于Logisim软件中的项目文件,主要涉及构建全相联缓存(cache)的设计。Logisim是一款强大的、免费的电路模拟软件,常被用来教学数字逻辑和计算机组织等课程。下面将详细...

    微博Cache架构设计实践

    微博Cache架构设计实践涉及了缓存系统的设计原理、实施策略、以及在实际运营中遇到的问题和解决方案。 缓存(Cache)是一种用于临时存储频繁访问数据的技术,它能够显著减少数据的读取时间,降低后端服务器的压力,...

    cache 设计资料

    直接映射cache设计简单,易于实现,但由于冲突缺失的可能较高,其性能并不总是最优。 3. 全关联映射(Fully associative):在这个结构中,任何主存储器块都可以存储在cache的任何位置。全关联cache可以最大化利用...

    cache模拟器的设计与实现(报告以及代码).rar

    【标题】"Cache模拟器的设计与实现(报告以及代码).rar" 提供的是一个关于计算机体系结构实验的资源,其中包含对缓存(Cache)系统设计和实现的深入研究。在计算机科学中,Cache是提升计算性能的关键技术,它通过...

    MIPS五级流水线CPU+cache设计

    MIPS五级流水线CPU与cache的设计是计算机体系结构中的一个重要课题,主要涉及硬件级别的优化,以提升处理器的性能和效率。在这个项目中,我们利用Verilog语言来实现这一复杂系统,这是一种常用的硬件描述语言,用于...

    实验四:Cache控制器设计1

    实验四“Cache控制器设计1”主要目标是让学生理解和掌握Cache控制器的工作原理以及设计方法,同时通过实际编程实现Cache控制器的功能。在这个实验中,学生需要编写各个子模块的代码,并进行测试,确保Cache控制器能...

    简易的cache模拟器

    **简易的Cache模拟器** 在计算机系统中,Cache是一种高速数据存储部件,它用于暂时存储处理器频繁访问的...通过实现和调试,开发者可以更直观地感受Cache如何提高计算机性能,为后续的系统优化和硬件设计奠定基础。

    Cache低功耗结构设计技术现状.doc

    低功耗Cache设计不仅要考虑性能,还要兼顾能效,通过这些策略可以在保持性能的同时,显著降低系统的能耗,满足绿色计算的需求。 总结起来,Cache作为解决CPU与内存速度不匹配的关键技术,其低功耗结构设计需要综合...

    cache设计实验_v0.11

    【cache设计实验_v0.11】实验主要探讨了如何设计高效的Cache系统,涉及的关键知识点包括Cache的接口设计、内部结构、I$与D$的分离策略以及Write Through与Write Back两种写策略的选择。 1. **Cache接口设计**:...

    实验4 直接映射Cache设计-实验报告1

    实验报告的主题是“直接映射Cache设计”,这是计算机组成原理中的一个重要部分,主要涉及Cache的工作原理和实现。直接映射Cache是一种简单的缓存组织方式,其中主存中的每一行都有一个固定的位置在Cache中。 Cache...

    cache原理简介PPT教学课件.pptx

    直接映射 Cache 是最简单的一种映射方式,将内存地址分解为三个域: Tag、Index 和 Offset。其中,Tag 用于标识 Cache 中的数据是否是所需的,Index 用于选择合适的 Cache 行,Offset 用于选择 Cache 块中的字节。 ...

    华中科技大学-计算机组成原理-educoder Logisim-储存系统设计(HUST) 答案代码

    在本项目中,我们关注的是储存系统的不同设计,包括汉字字库存储芯片扩展、MIPS架构下的寄存器文件、RAM设计以及多种类型的Cache设计。Logisim是一款常用的逻辑电路设计与模拟软件,它被用来实现这些设计。 1. **...

    Cache实验报告

    接下来,通过简单的算术运算(除法和取模),实现了对主存地址的分割,从而确定缓存行的`tag`标记位以及它在Cache中的具体位置。 - **去TAG和确定位置函数**: - `tag`函数:计算缓存行的`tag`值。 - `location`...

    Cache控制器设计实验.pdf

    在本实验中,我们将设计一个简单的Cache控制器,并使用FPGA来实现它。 Cache控制器的设计需要遵守一定的规则,例如 Cache地址变换规则、Cache控制规则等。 Cache控制器的应用非常广泛,例如在计算机系统、嵌入式...

Global site tag (gtag.js) - Google Analytics