package com.erick.cache;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import java.time.Duration;
public final class CacheUtil {
private static int expireSeconds = 2;
public static Cache<String, String> cacheWithExpireSeconds;
private static int maxPairs = 1;
public static Cache<String, String> cacheWithMaxPairs;
static {
/*过期策略,写完60s后过期*/
cacheWithExpireSeconds = Caffeine.newBuilder()
.expireAfterWrite(Duration.ofSeconds(expireSeconds))
.build();
/*过期策略,达到最大值后删除
* 1. 并不会立即删除,等一会儿才会删除
* 2. 会将之前存储的数据删除掉*/
cacheWithMaxPairs = Caffeine.newBuilder()
.maximumSize(maxPairs)
.build();
}
/*从缓存中获取数据
* 1. 如果缓存中有,则直接从缓存中返回
* 2. 如果缓存中没有,则去数据查询并返回结果*/
public static String getKeyWithExpire(String key) {
return cacheWithExpireSeconds.get(key, value -> {
return getResultFromDB();
});
}
public static String getKeyWithMaxPair(String key) {
return cacheWithMaxPairs.get(key, value -> {
return getResultFromDB();
});
}
private static String getResultFromDB() {
System.out.println("数据库查询");
return "db result";
}
}
|