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的设计。该实验属于综合设计型,旨在通过实践来...
2路组相联Cache设计是一种常见的Cache组织方式,它在提升数据存取效率的同时,兼顾了存储空间和成本的有效利用。本文将深入探讨2路组相联Cache的设计原理、工作机制以及其在计算机组成中的重要性。 2路组相联Cache...
直接相联映射Cache是一种常见的高速缓存设计方式,它在计算机系统中起着至关重要的作用,用于提高CPU访问主存的速度。本实验报告详细介绍了如何设计一个直接相联映射Cache,包括其基本概念、设计要求、方案设计、...
IOS Cache设计 Cache的设计是个基础计算机理论,也是程序员的重要基本功之一。Cache几乎无处不在,CPU的L1 L2 Cache,iOS系统的clean page和dirty page机制,HTTP的tag机制等,这些背后都是Cache设计思想的应用。 为...
第5关:直接相联cache设计 本设计是关于直接相联高速缓存(cache)的设计,采用Logisim软件进行实现。在本电路设计中,我们将构建一个简单的直接相联cache,以展示数据如何被存储和检索的过程。 ### 直接相联高速...
根据提供的文件信息,我们可以推断出这是一份用于Logisim软件中的项目文件,主要涉及构建全相联缓存(cache)的设计。Logisim是一款强大的、免费的电路模拟软件,常被用来教学数字逻辑和计算机组织等课程。下面将详细...
微博Cache架构设计实践涉及了缓存系统的设计原理、实施策略、以及在实际运营中遇到的问题和解决方案。 缓存(Cache)是一种用于临时存储频繁访问数据的技术,它能够显著减少数据的读取时间,降低后端服务器的压力,...
直接映射cache设计简单,易于实现,但由于冲突缺失的可能较高,其性能并不总是最优。 3. 全关联映射(Fully associative):在这个结构中,任何主存储器块都可以存储在cache的任何位置。全关联cache可以最大化利用...
【标题】"Cache模拟器的设计与实现(报告以及代码).rar" 提供的是一个关于计算机体系结构实验的资源,其中包含对缓存(Cache)系统设计和实现的深入研究。在计算机科学中,Cache是提升计算性能的关键技术,它通过...
MIPS五级流水线CPU与cache的设计是计算机体系结构中的一个重要课题,主要涉及硬件级别的优化,以提升处理器的性能和效率。在这个项目中,我们利用Verilog语言来实现这一复杂系统,这是一种常用的硬件描述语言,用于...
实验四“Cache控制器设计1”主要目标是让学生理解和掌握Cache控制器的工作原理以及设计方法,同时通过实际编程实现Cache控制器的功能。在这个实验中,学生需要编写各个子模块的代码,并进行测试,确保Cache控制器能...
**简易的Cache模拟器** 在计算机系统中,Cache是一种高速数据存储部件,它用于暂时存储处理器频繁访问的...通过实现和调试,开发者可以更直观地感受Cache如何提高计算机性能,为后续的系统优化和硬件设计奠定基础。
低功耗Cache设计不仅要考虑性能,还要兼顾能效,通过这些策略可以在保持性能的同时,显著降低系统的能耗,满足绿色计算的需求。 总结起来,Cache作为解决CPU与内存速度不匹配的关键技术,其低功耗结构设计需要综合...
【cache设计实验_v0.11】实验主要探讨了如何设计高效的Cache系统,涉及的关键知识点包括Cache的接口设计、内部结构、I$与D$的分离策略以及Write Through与Write Back两种写策略的选择。 1. **Cache接口设计**:...
实验报告的主题是“直接映射Cache设计”,这是计算机组成原理中的一个重要部分,主要涉及Cache的工作原理和实现。直接映射Cache是一种简单的缓存组织方式,其中主存中的每一行都有一个固定的位置在Cache中。 Cache...
直接映射 Cache 是最简单的一种映射方式,将内存地址分解为三个域: Tag、Index 和 Offset。其中,Tag 用于标识 Cache 中的数据是否是所需的,Index 用于选择合适的 Cache 行,Offset 用于选择 Cache 块中的字节。 ...
在本项目中,我们关注的是储存系统的不同设计,包括汉字字库存储芯片扩展、MIPS架构下的寄存器文件、RAM设计以及多种类型的Cache设计。Logisim是一款常用的逻辑电路设计与模拟软件,它被用来实现这些设计。 1. **...
接下来,通过简单的算术运算(除法和取模),实现了对主存地址的分割,从而确定缓存行的`tag`标记位以及它在Cache中的具体位置。 - **去TAG和确定位置函数**: - `tag`函数:计算缓存行的`tag`值。 - `location`...
在本实验中,我们将设计一个简单的Cache控制器,并使用FPGA来实现它。 Cache控制器的设计需要遵守一定的规则,例如 Cache地址变换规则、Cache控制规则等。 Cache控制器的应用非常广泛,例如在计算机系统、嵌入式...