本地缓存设计

被问到本地缓存设计,有点蒙,事后反应过来,何必一个Map呢,两个就可以解决了。真是当时脑子短路了。

package cache;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class MyCache<K, V> {

private static class ValueObject<T> {

private T value;
private long timeout;

private ValueObject(T value, long timeout) {
super();
this.value = value;
this.timeout = timeout;
}

private T getValue() {
return value;
}

private long getTimeout() {
return timeout;
}

}

public static final Map<Object, ValueObject> localCache = new ConcurrentHashMap<Object, ValueObject>();

public static Object set(Object key, ValueObject value, long timeout) {
long currentTime = System.currentTimeMillis();
ValueObject valueObject = localCache.get(key);
if (localCache.keySet().contains(key)
&& (valueObject.getTimeout() == 0 || currentTime <= valueObject.getTimeout())) {
return valueObject.getValue();
} else {
ValueObject oldValueObject = localCache.put(key, new ValueObject(value, currentTime + timeout));
return oldValueObject == null ? null : oldValueObject.getValue();
}
}

public static <T> T set(Object key, ValueObject value) {
ValueObject oldValueObject = localCache.put(key, new ValueObject(value, 0));
return (T) (oldValueObject == null ? null : oldValueObject.getValue());
}

public static <T> T get(Object key) {
long currentTime = System.currentTimeMillis();
ValueObject valueObject = localCache.get(key);
if (valueObject == null) {
return null;
}
if (valueObject.getTimeout() == 0 || currentTime <= valueObject.getTimeout()) {
return (T) valueObject.getValue();
} else {
localCache.remove(key);
return null;
}
}

}

思路清晰了,就好写了,借鉴了下别人的思路,有错误欢迎指出。

原文地址:https://www.cnblogs.com/anyehome/p/8858848.html

时间: 2024-11-02 16:14:14

本地缓存设计的相关文章

设计一个移动应用的本地缓存机制

在手机应用程序开发中,为了降低与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制,前面一篇文章介绍了iOS设备的内存缓存.这篇文章将设计一个本地缓存的机制. 功能需求 这个缓存机制满足以下这些功能. 1.能够将数据缓存到本地磁盘. 2.能够推断一个资源是否已经被缓存.假设已经被缓存.在请求同样的资源.先到本地磁盘搜索. 3.能够推断文件缓存什么时候过期.这里为了简单起见这里,我们在请求url资源的时候.给每次请求的文件设定一个过期的时间. 4.能够实现:假设文件已经被

iOS 本地缓存实现 方案借鉴

在手机应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制,前面一篇文章介绍了iOS设备的内存缓存,这篇文章将设计一个本地缓存的机制. 功能需求 这个缓存机制满足下面这些功能. 1.可以将数据缓存到本地磁盘. 2.可以判断一个资源是否已经被缓存.如果已经被缓存,在请求相同的资源,先到本地磁盘搜索. 3.可以判断文件缓存什么时候过期.这里为了简单起见这里,我们在请求url资源的时候,给每次请求的文件设定一个过期的时间. 4.可以实现:如果文件已经被

关于本地缓存

今天电面时被问到了UIWebView的本地缓存,之前未关注过webview的缓存,所以查了下博文 原文链接:http://blog.csdn.net/zhuqilin0/article/details/6653532 在手机应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制,前面一篇文章介绍了iOS设备的内存缓存,这篇文章将设计一个本地缓存的机制. 功能需求 这个缓存机制满足下面这些功能. 1.可以将数据缓存到本地磁盘. 2.可以判断一个资源是

本地缓存机制之一

在手机应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制,前面一篇文章介绍了iOS设备的内存缓存,这篇文章将设计一个本地缓存的机制. 功能需求 这个缓存机制满足下面这些功能. 1.可以将数据缓存到本地磁盘. 2.可以判断一个资源是否已经被缓存.如果已经被缓存,在请求相同的资源,先到本地磁盘搜索. 3.可以判断文件缓存什么时候过期.这里为了简单起见这里,我们在请求url资源的时候,给每次请求的文件设定一个过期的时间. 4.可以实现:如果文件已经被

分布式系统JVM本地缓存同步实现dlcache

现成的分布式K/V缓存已经有很多的实现,最主要的比如redis,memcached.那为什么我们还要自己去实现呢,在我们解决了分布式系统下大量rpc调用导致的高延时后,我们发现很多服务需要大量的访问分布式缓存,由于分布式缓存通常部署在单独的服务器中,在lan中,通常单次网络也需要1ms,一个请求少的可能需要一两次缓存访问,复杂的服务比如委托.出入金.融资等会访问一二十次,即使程序已经优化,但仅访问分布式缓存花费的网络延时占据了整个响应时间的很大一部分比例,而这些需要广泛被访问的数据通常数据量本身

Android 图片缓存设计

1.简介 大家都知道,在我们Android 开发的过程中,对于图片的处理,是非常重要的,而对于我们如果每次都重网络去拉去图片,那样会造成,现在android应用中不可避免的要使用图片,有些图片是可以变化的,需要每次启动时从网络拉取,这种场景在有广告位的应用以及纯图片应用(比如淘宝,qq的照片墙)中比较多. 现在有一个问题:假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量.在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响.当然,我想,

本地缓存机制之二

4.下面我们设计缓存项下载成功和失败的两个委托方法: @protocol CacheItemDelegate <NSObject> //下载成功执行该方法 - (void) cacheItemDelegateSucceeded :(CacheItem *)paramSender withRemoteURL:(NSURL *)paramRemoteURL withAboutToBeReleasedData:(NSData *)paramAboutToBeReleasedData; //下载失败执

21、缓存设计

? 什么是缓存 缓存一般是磁盘或内存中的存储区域,用于存储从网络或其他数据源 获取的文件.通常这些数据源的访问速度远低于缓存的访问速度.使用 缓存可以大大提高程序的运行效率,但数据不会实时更新. ? 缓存设计原理  这里以ListView为例.在ListView上显示多个从网络上下载的图片. 如果是第一次运行程序,需要实时从网络上下载这些图片文件.但由于 网络速度的原因,如果一边下载.一边显示,ListView就会有些卡.所以 我们采用了缓存技术,也就是说,当ListView显示网络上某个图片时

大型web系统数据缓存设计

1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计却并不容易:所以接下来将讨论一下应用系统缓存的设计方面应该注意哪些东西,包括缓存的选型.常见缓存系统的特点和数据指标.缓存对象结构设计和失效策略以及缓存对象的压缩等等,以期让有需求的同学尤其是初学者能够快速.系统的了解相关知识. 2. 数据库的瓶颈 2.1 数据量 关系型数据库的数据量是比较小的,以我们常用的MySQL为例,单表数据条数一般应该控制在2000w以内,如果业务很复杂的话,可能还要低一些.即便是