最近在項目中看到同事使用了Guava Cache;對這個不是特別瞭解,記錄學習。
1、依賴
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
2、創建Cache
final Cache<String,String> cache = CacheBuilder.newBuilder()
//設置cache的初始大小爲16
.initialCapacity(16)
//設置併發數爲5,即同一時間最多隻能有5個線程往cache執行寫入操作
.concurrencyLevel(5)
//設置cache中的數據在寫入之後的存活時間爲10秒
.expireAfterWrite(10, TimeUnit.SECONDS)
//構建cache實例
.build();
3.使用Cache
put方法
cache.put("name","tom");
get方法
直接從chche中取出value數據
cache.getIfPresent("name");
String age = cache.get("name", new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2*1000);
return "age";
}
});
注意事項:①如果調用get方法時key在cache中存在;直接返回。②如果key不存在;執行call()中代碼;注意;不能返回null
③get方法並不是多線程的;而是執行get方法的調用線程執行call方法。
4.過期和其他參考:
https://blog.csdn.net/qb170217/article/details/81484139