`

简单的缓存设计

 
阅读更多
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应用程序中最常用的性能优化手段之一,但是设计一个好的缓存系统需要考虑许多问题,例如缓存穿透、缓存击穿和缓存雪崩等问题。本文将对这些问题进行分析,并提供相应的...

    java简单的缓存池实现

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

    Java缓存框架Java缓存框架

    简单. 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 5. 缓存数据会在虚拟机重启的过程中写入磁盘 6. 可以通过RMI、可插入API等方式进行分布式缓存 7. 具有缓存和缓存管理器的侦听接口 8. ...

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

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

    node-cached, 一个 node.js的简单缓存库,由播放缓存API激发.zip

    node-cached, 一个 node.js的简单缓存库,由播放缓存API激发 缓存一个简单的缓存库,灵感来自播放缓存 API,并偏向于显示陈旧数据而不是 dog 。 接口只公开非常有限的功能,不存在缓存数据的多重获取或者删除。 虽然...

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

    FEATURE ✔️ 拦截webview资源请求 ✔️ 自定义缓存策略 ✔️ 自定义缓存key策略 ✔️ 简单让webview共享fresco的图片缓存

    架构设计之分布式缓存

    下面我就把我们的缓存模块给大家做个简单介绍。2:类图3:简单介绍缓存分为两个部分。一个是缓存结构一个是存储结构。缓存结构主要解决对象什么时候过期而存储结构主要解决对象存储到什么地方。3.1缓存结构我们在...

    Fikker设计与实现V3

    3. 缓存设计 3.1. 缓存说明 3.2. 智能缓存设计 3.3. 强制缓存设计 3.3.1. 公共缓存 3.3.2. 会员缓存 3.3.3. 游客缓存 3.3.4. 会员缓存设计背景 3.3.5. 图例说明 3.4. 拒绝缓存设计 3.5. 清理缓存设计 3.6. 缓存...

    缓存技术浅谈PPT简介

    介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题

    交叉节点缓存crossbar交换结构设计

    针对传统交换结构调度复杂且时间开销大的问题,采用交叉点缓存(Buffered Crossbar)交换结构和改进的轮询调度算法,在输出端设置按一定的缓存顺序输出,并通过verilog代码实现了8*8的CICQ交换结构。极大地缓解了...

    经典Python面试题之数据库和缓存 共46道题.pdf

    1. Redis 和 Memcached 比较:Redis 支持更多的数据类型和操作,Memcached 只支持简单的字符串缓存。 2. Redis 中数据库默认是多少个 db 及作用:Redis 默认有 16 个数据库,编号从 0 到 15。 3. Python 操作 Redis ...

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

    本功能主要是利用文件修改时间函数filemtime与现在时间作减法判断是否更新内容。

    .net环境下的缓存技术.

    介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页)

    JavaScript设计模式之缓存代理模式原理与简单用法示例

    本文实例讲述了JavaScript设计模式之缓存代理模式原理与简单用法。分享给大家供大家参考,具体如下: 一、原理: 缓存代理可以为一些开销大的运算结果提供暂时的存储,在下次运算时,如果传递进来的参数跟之前的一致...

    电商系统开发设计文档.pdf

    本文档对电商系统的开发设计进行了详细的描述,涵盖了需求设计、业务流程、接口设计、数据库设计、配置变更、兼容性设计、缓存设计、业务逻辑等方面的内容,为电商系统的开发和实施提供了重要的参考依据。

    2.2.2 云原生go-zero微服务框架设计思考@万俊峰.pdf

    本报告涵盖了go-zero的设计原则、架构选型、微服务代码生成工具goctl、通用API定义规范、缓存设计、服务发现、负载均衡、流控、请求鉴权、业务聚合等方面的内容。 go-zero的设计原则: 1. 保持简单,第一原则:go-...

    缓存VHDL设计

    用VHDL编的简单的cache 应该是一个好的例子 学习计算机原理入门

    六种微服务架构的设计模式.pdf

    聚合器微服务设计模式是最常用和最简单的微服务架构设计模式。在这种模式下,聚合器服务调用多个服务来实现应用程序所需的功能。它可以是一个简单的Web页面,将检索到的数据进行处理和展示。它也可以是一个更高层次...

    基于单片机的电子秤设计

    本系统主要由单片机来控制,测重部分由称重传感器及A/D转换器组成,加上显示单元,此电子秤俱备了功能多、性能价格比高、功耗低、系统设计简单、使用方便直观、速度快、测量准确、自动化程度高等特点。 本系统以AT...

    ios-MUImageCache - 简单轻量的图片缓存框架.zip

    优点: 1.可将多张小图解码后存储到同一张大图上,在同屏渲染多图时,效率极高; 2.支持mmap内存映射,高效的I/O操作,减少一次文件拷贝操作 3.减少内存占用; 支持Byte Alignment字节对其,渲染过程中,避免执行CA::...

Global site tag (gtag.js) - Google Analytics