maven依賴
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.1-jre</version>
</dependency>
應用
首先定義這個Cache。
public class GlobalCache {
private static GlobalCache defaultInstance = new GlobalCache();
public static GlobalCache getDefaultInstance() {
return defaultInstance;
}
// 因爲Guava Cache支持定時回收,所以設置5分鐘就清空緩存
private Cache<String, Object> cache = CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build();
public Object get(String key, Callable<Object> callable) throws Exception {
return cache.get(key, callable);
}
public <T> T get(String key) throws Exception {
return (T) cache.getIfPresent(key);
}
public void put(String key, Object value) throws Exception {
cache.put(key, value);
}
}
使用方法如下:
Bean cache = GlobalCache.getDefaultInstance().get(key);
if (dispatchRule == null) {
cache = objectMapper.selectById(id);
GlobalCache.getDefaultInstance().put(key, cache);
}
緩存回收
一個殘酷的現實是,我們幾乎一定沒有足夠的內存緩存所有數據。所以必須決定:什麼時候某個緩存項就不值得保留了?Guava Cache提供了三種基本的緩存回收方式:
- 基於容量回收
- 定時回收
- 基於引用回收。