Guava Cache的應用

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提供了三種基本的緩存回收方式:

  • 基於容量回收
  • 定時回收
  • 基於引用回收。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章