caffeine的簡單使用
使用caffeine載入資料有三種方式:
1、手動載入,也就是構建快取的時候並不載入資料,在需要的時候再去載入並快取
public
static
void
main
(string[
] args)
throws interruptedexception
2、同步載入,構建快取的同時載入快取資料
loadingcache
cache = caffeine.
newbuilder()
.expireafterwrite(2
, timeunit.seconds)
.maximumsize(10
).build
(key -
> key +
"-"+ system.
currenttimemillis()
);// 獲取key,不存在則執行build裡面的方法進行載入
system.out.
println
(cache.
get(
"key1"))
;
3、非同步載入
asyncloadingcache
cache = caffeine.
newbuilder()
.expireafterwrite(2
, timeunit.seconds)
.buildasync
(key -
> key +
"-"+ system.
currenttimemillis()
);// 獲取不存在的key時,會使用buildasync()方法中的演算法計算出value,存入快取
// 非同步獲取的結果存放在completablefuture物件中,可以使用thenaccept()獲取結果
completablefuture
future = cache.
get(
"key1");
future.
thenaccept
(o -
> system.out.
println
(system.
currenttimemillis()
+"-"
+ o));
timeunit.seconds.
sleep(3
);// 不存在則返回null
completablefuture
key2 = cache.
getifpresent
("key2");
system.out.
println
(key2)
;
簡單快取設計
在專案開發中,快取起到至關重要的作用,它能加快程式執行的速度,提高程式效能。按照快取是否備份到磁碟中,可將快取分為兩種 只在記憶體中執行,斷電後消失 與磁碟中的檔案進行交換,下次啟動時能從檔案中恢復。筆者在實際中用到了幾種快取,下面簡單總結。1,堆疊式快取。這種快取適合儲存大小一致的資料塊。初始化時...
快取簡單實現
時間和次數觸發更新 有快取雪崩的情況,更新有更新鎖,還是有點併發問題,不適用於高併發,不嚴謹,簡單實現.有乙個更新就可以了,不要都更新 切記 獲取鎖後在finally裡釋放該鎖!否則將導致無法獲取到鎖來更新快取。如果重新整理時間小於1小時且訪問次數小於100且已經重新整理完成可以直接從快取中取,否則...
Lru快取的簡單實現
最近最少使用演算法設計的map快取 使用linkedhashmap特性,完成當快取超過指定容量時,擠掉最久未使用的資源。具體編寫的工具類如下 一 cache類 繼承linkedhashmap 用於儲存資料 class cache extends linkedhashmap 取得元素耗費儲存空間大小 ...