`

简单的缓存设计

 
阅读更多
package com.buffer.clz;

import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public final class MyCache<K, V> {
	private final Lock lock = new ReentrantLock();
	private final int maxCapacity;
	private final Map<K,V> eden;
	private final Map<K,V> longterm;
	public MyCache(int maxCapacity) {
		super();
		this.maxCapacity = maxCapacity;
		this.eden = new ConcurrentHashMap<K,V>(maxCapacity);
		this.longterm =  new WeakHashMap<K,V>(maxCapacity);
	}
	
	public V get(K k){
		V v= this.eden.get(k);
		if(v == null){
			lock.lock();
			try {
				v = this.longterm.get(k);
			} catch (Exception e) {
				// TODO: handle exception
			}finally{
				lock.unlock();
			}
			if(v != null){
				this.eden.put(k, v);
			}
		}
		return v;
	}
	
	public void put(K k,V v){
		if(this.eden.size() >= maxCapacity){
			lock.lock();
			try {
				this.longterm.putAll(eden);
			} catch (Exception e) {
				// TODO: handle exception
			}finally{
				lock.unlock();
			}
			this.eden.clear();
		}
		this.eden.put(k, v);
	}
	
}

 

分享到:
评论

相关推荐

    如何设计缓存系统:缓存穿透,缓存击穿,缓存雪崩解决方案分析.docx

    缓存系统设计解决方案分析 缓存系统是当前web应用程序中最常用的性能优化手段之一,但是设计一个好的缓存系统需要考虑许多问题,例如缓存穿透、缓存击穿和缓存雪崩等问题。本文将对这些问题进行分析,并提供相应的...

    缓存架构设计细节二三事

    ### 缓存架构设计细节分析 #### 一、需求缘起及应用场景 缓存作为一种提升系统性能的关键技术,尤其适用于那些读操作远多于写操作的场景。在具体的应用场景中,比如用户的账户余额信息表(account(uid, money)),...

    Discuz!NT 缓存设计简析

    NT 缓存设计简析】 Discuz!NT 是一款基于.NET平台的社区论坛软件,其缓存设计是提高系统性能的关键部分。在本文中,我们将深入探讨Discuz!NT的缓存架构,了解它如何利用策略模式来优化数据访问,并探讨其中涉及到的...

    高性能网站架构设计之缓存篇

    【高性能网站架构设计之缓存篇】探讨了如何在网站架构中有效利用缓存提升性能。缓存是解决高并发、大数据量访问问题的关键技术,它通过存储热门数据,减少对数据库的直接访问,从而提高响应速度。在这个主题中,我们...

    java简单的缓存池实现

    java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现,java缓存原理,简单的缓存池实现。

    Rails缓存架构设计

    - **基于Rails Cache的封装**:尽管简单,但能有效地实现对象缓存的自动化管理,适用于简单的场景。 #### 七、总结 构建高性能Web应用的缓存架构是一个系统工程,涉及到多个层面的技术选择和实现细节。通过对上述...

    Cache 缓存数据和删除缓存的简单示例

    在实际开发中,为了提高缓存的效率和可维护性,可以采用缓存策略设计,如Least Recently Used (LRU)、First In First Out (FIFO)、Time To Live (TTL)等。同时,监控和调试缓存性能也非常重要,可以使用各种工具和...

    PHP实现的简单缓存类.zip

    标题中的“PHP实现的简单缓存类”表明这是一个自定义的PHP类,设计用于实现基本的缓存功能。下面我们将详细讨论这个类可能包含的关键方法: 1. **析构函数**:在PHP中,析构函数是对象被销毁时自动调用的特殊方法。...

    缓存VHDL设计

    缓存(Cache)是计算机系统中的一个重要组成部分,它在处理器与主存之间提供了一层高速的数据存储,以解决速度不匹配的...`cache.qar`和`cache.qarlog`可能是缓存设计的仿真结果文件,用于查看和分析设计的运行情况。

    数据库多级缓存架构设计.docx

    缓存设计的重要性在于解决 CPU 运算速度远大于内存读写速度的问题,缓存的出现主要是为了解决这个问题。传统的 CPU 通过 fsb 直连内存的方式显然就会因为内存访问的等待,导致 CPU 吞吐量下降,内存成为性能瓶颈。...

    webapi接口缓存组件

    用户可以简单地在API接口上添加特性来启用缓存,同时组件应提供接口或配置项供开发者自定义缓存策略、存储方式等。 例如: ```csharp [CacheTime(60)] // 默认缓存60秒 public HttpResponseMessage Get(int id) { ...

    缓存、缓存算法和缓存框架简介 - 文章 - 伯乐在线.pdf

    文章中提及的面试者programmerone对缓存的理解非常浅显,仅限于知道使用hashtable实现简单的缓存机制,而没有深入了解缓存的工作原理、缓存算法的选择标准和缓存框架的使用。面试官提出的问题主要集中在缓存的基本...

    Android-HybridCache:一种简单的native与webview共享缓存的设计

    Android-HybridCache项目正是针对这种需求,提供了一种简单的方式来实现Native与WebView之间的缓存共享,特别是对于优化网页加载速度和减少网络请求有着重要作用。以下是对这个项目的详细解析: ### 1. 拦截WebView...

    带有缓存的流水线CPU设计

    综上所述,带有缓存的16位5级流水线CPU设计涉及了多个关键技术和概念,包括Verilog编程、流水线技术、缓存设计、地址映射和替换策略等。理解并实现这样一个CPU不仅需要深厚的数字电路基础,还需要对计算机体系结构有...

    swift-一句代码就可为你的数据添加一级和二级目录缓存支持单独删除指定文件下的文件

    总之,良好的数据缓存设计对于任何应用都是至关重要的,而Swift提供了一系列强大的工具和框架,使得开发者能够轻松地构建高效、灵活的缓存解决方案。通过深入理解和运用这些知识点,我们可以提高应用的性能,为用户...

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

    “基于模版方法的简单缓存功能”这一标题暗示了我们将讨论一个设计模式的应用,即模板方法模式,以及它如何被用来实现一个缓存系统。缓存是一种提升应用程序性能的技术,通过存储频繁访问的数据,减少对原始数据源的...

    php一个简单的文件缓存类.zip

    这个“php一个简单的文件缓存类”可能是为了实现这一目标而设计的。下面我们将深入探讨文件缓存的基本原理,以及如何利用PHP编写一个简单的文件缓存类。 文件缓存的工作机制主要是将动态生成的内容(如数据库查询...

    Python-一个采用Python开发的简单缓存服务器

    在描述中提到的“一个采用Python开发的简单缓存服务器”,我们可以推测这个服务器可能具备基础的缓存功能,如设置、获取和删除缓存项,可能还支持过期策略,以保证缓存数据的时效性。为了实现这样的功能,开发者可能...

    简单的PHP缓存设计实现代码

    本文将深入探讨一种基于文件系统的简单PHP缓存设计及其实现方式,具体通过比较文件的修改时间和当前时间来决定是否需要重新生成内容。 首先,我们来看一下提供的代码片段: ```php // 设置缓存过期时间,单位为秒...

Global site tag (gtag.js) - Google Analytics