本地缓存工具类LoadingCache快速上手使用,设置缓存key过期时间、自动刷新
Maven依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
测试用例
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import java.util.Random;
import java.util.concurrent.TimeUnit;
/**
* @author zlin
* @date 20221008
*/
public class LoadingCacheTest {
/**
* 缓存key在指定时间过期,过期后再次获取时将重新加载到本地缓存
*/
private static final LoadingCache<String, String> CACHE = CacheBuilder.newBuilder()
// 缓存写入后多久过期
.expireAfterWrite(5, TimeUnit.SECONDS)
.maximumSize(10)
.build(new StringCacheLoader());
public static void main(String[] args) {
Random random = new Random();
while (true) {
try {
System.out.println("------------------------------------------------------------------");
String key = String.valueOf(random.nextInt(5));
System.out.println(System.currentTimeMillis() + "_开始获取缓存key=" + key);
String result = CACHE.get(key);
System.out.println("获取缓存结果=" + result);
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static class StringCacheLoader extends CacheLoader<String, String> {
/**
* 当查询的key在缓存中不存在时,将调用此方法获取并置入缓存
* @param key cacheKey
* @return cacheValue
* @throws Exception Exception
*/
@Override
public String load(String key) throws Exception {
String result = "cache value_" + System.currentTimeMillis() + "_" + key;
System.out.println("加载缓存=" + result);
return result;
}
}
}