引入guava包
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>29.0-jre</version>
</dependency>
封装工具栏
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import java.util.concurrent.TimeUnit;
/**
* 带有效期的本地缓存工具
*
* @author 向振华
* @date 2021/02/26 10:33
*/
public class CacheUtils {
/**
* 初始化缓存
*/
private static final LoadingCache<Object, Object> CACHE = CacheBuilder.newBuilder()
// 缓存池大小,在缓存项接近该大小时, Guava开始回收旧的缓存项
.maximumSize(16)
// 设置缓存在写入之后在设定时间后失效
.expireAfterWrite(3, TimeUnit.SECONDS)
.build(new CacheLoader<Object, Object>() {
@Override
public Object load(Object key) {
// 处理缓存键不存在缓存值时的处理逻辑
return null;
}
});
/**
* 存入缓存
*
* @param key
* @param value
*/
public static void put(Object key, Object value) {
CACHE.put(key, value);
}
/**
* 获取缓存
*
* @param key
*/
public static Object get(Object key) {
try {
return CACHE.get(key);
} catch (Exception e) {
return null;
}
}
/**
* 是否存在key
*
* @param key
* @return 是否存在key
*/
public static boolean isExist(Object key) {
boolean isExist;
try {
isExist = CACHE.get(key) != null;
} catch (Exception e) {
isExist = false;
}
return isExist;
}
}
测试
public static void main(String[] args) throws Exception {
System.out.println(CacheUtils.get("x"));
CacheUtils.put("x", "aaa");
CacheUtils.put("x", "bbb");
System.out.println(CacheUtils.get("x"));
Thread.sleep(5000L);
System.out.println("-------");
System.out.println(CacheUtils.get("x"));
CacheUtils.put("x", "aaa");
System.out.println(CacheUtils.get("x"));
}
结果:
null
bbb
-------
null
aaa