您的位置:首页 > 编程语言 > Java开发

java实现本地缓存

2016-12-12 10:44 363 查看

这里本地缓存的含义是 多个线程公用的一个静态的Map对象

作用是减少db或cache的查询次数。

使用场景为静态或者非敏感数据。

也可以使用google的guava cache等


缓存类

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

import java.util.HashMap;
import java.util.Map;

public class LocalCache {

//缓存Map
private static Map<String,CacheContent> map = new HashMap<>();
private static  LocalCache localCache = new LocalCache();

private LocalCache(){
}

public  String getLocalCache(String key) {
CacheContent cc = map.get(key);

if(null == cc) {
return null;
}

long currentTime = System.currentTimeMillis();

if(cc.getCacheMillis() > 0 && currentTime - cc.getCreateTime() > cc.getCacheMillis()) {
//超过缓存过期时间,返回null
map.remove(key);
return null;
} else {
return cc.getElement();
}
}

public void setLocalCache(String key,int cacheMillis,String value) {
long currentTime = System.currentTimeMillis();
CacheContent cc = new CacheContent(cacheMillis,value,currentTime);
map.put(key,cc);
}

public static LocalCache getInStance(){
return localCache;
}

@Getter
@Setter
@AllArgsConstructor
class CacheContent{
// 缓存生效时间
private  int cacheMillis;
// 缓存对象
private String element;
// 缓存创建时间
private long createTime ;

}

}

调用代码

//先查询本地缓存
String key ="testkey";
LocalCache localCache = LocalCache.getInStance();
String value = localCache.getLocalCache(key);

if(StringUtils.isBlank(value)) {
//从db或cache获取数据
value = RedisClient.get(key);
//设置本地缓存,生效时间为10秒
localCache.setLocalCache(key ,10000,value);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: