缓存操作接口
/**
* 缓存操作接口
*
* @author xiudong
*
* @param <T>
*/
public interface Cache<T> {
/**
* 刷新缓存数据
*
* @param key 缓存key
* @param target 新数据
*/
void refresh(String key, T target);
/**
* 获取缓存
*
* @param key 缓存key
* @return 缓存数据
*/
T getCache(String key);
/**
* 判断缓存是否过期
*
* @param key 缓存key
* @return 如果缓存过期返回true, 否则返回false
*/
Boolean isExpired(String key);
/**
* 设置缓存过期时间
*
* @param key 缓存key
* @param millsec 缓存过期时间,单位:毫秒
*/
void setExpired(Long millsec);
/**
* 是否存在缓存对象
*
* @param key 缓存key
* @return 存在返回true,不存在返回false
*/
Boolean exist(String key);
}
import java.util.Date;
/**
* 缓存实体
*
* @author xiudong
*
* @param <T>
*/
public class LastCache<T> {
/**
* 上次缓存的数据
*/
private T data;
/**
* 最后刷新时间
*/
private long refreshtime;
public LastCache(T data) {
this(data, new Date().getTime());
}
public LastCache(T data, long refreshtime) {
this.data = data;
this.refreshtime = refreshtime;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public long getRefreshtime() {
return refreshtime;
}
public void setRefreshtime(long refreshtime) {
this.refreshtime = refreshtime;
}
}
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 简单的缓存模型
*
* @author xiudong
*
* @param <T>
*/
public class SimpleCached<T> implements Cache<T> {
/**
* 缓存数据索引
*/
private Map<String, LastCache<T>> cache = new ConcurrentHashMap<String, LastCache<T>>();
/**
* 缓存超时时间,单位:毫秒
*/
private Long expired = 0L;
public SimpleCached() {
this(5 * 1000 * 60L);
}
public SimpleCached(Long expired) {
this.expired = expired;
}
@Override
public void refresh(String key, T target) {
if (cache.containsKey(key)) {
cache.remove(key);
}
cache.put(key, new LastCache<T>(target));
}
@Override
public T getCache(String key) {
if (!this.exist(key)) {
return null;
}
return cache.get(key).getData();
}
@Override
public Boolean isExpired(String key) {
if (!this.exist(key)) {
return null;
}
long currtime = new Date().getTime();
long lasttime = cache.get(key).getRefreshtime();
return (currtime - lasttime) > expired;
}
@Override
public void setExpired(Long millsec) {
this.expired = millsec;
}
@Override
public Boolean exist(String key) {
return cache.containsKey(key);
}
}