这里本地缓存的含义是 多个线程公用的一个静态的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);
}