最近代碼里看到有部分關于guava寫本地緩存的,學習記錄一下。
創新互聯建站專業為企業提供浦城網站建設、浦城做網站、浦城網站設計、浦城網站制作等企業網站建設、網頁設計與制作、浦城企業網站模板建站服務,十載浦城做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。首先guava的本地緩存可以理解成一個緩存map,以kv的形式存數據,不會持久化,沒有支持分布式。比redis使用起來方便,不用引入額外的組件。如果是單機緩存的話,可以首先選擇使用這種緩存方式。
Guava cache的設計來源于CurrentHashMap,是線程安全的,可以按照多種策略來清理存儲在其中的緩存值且保持很高的并發讀寫性能。常見應用場景:對性能有非常高的要求、不經常變化、占用內存不大、有訪問整個集合的需求、數據允許不時時一致。
Guava cache的優點多種清理和淘汰策略
支持并發(采用Segment做分區,線程安全)
更新鎖定(對同一個key,只讓一個請求去讀源并回填緩存,其他請求阻塞等待)
集成數據源(一般我們在業務中操作緩存,都會操作緩存和數據源兩部分GuavaCache的get可以集成數據源,在從緩存中讀取不到時可以從數據源中讀取數據并回填緩存)
引入依賴
com.google.guava guava 30.1.1-jre
抽象類
//引入數據庫DAO
//定義緩存的map格式
public LoadingCachetestCache
//初始化
@PostConstruct
private void init(){testCache = CacheBuilder.newBuilder()
// 初始大小
.initialCapacity(1000)
// 緩存池大小
.maximumSize(1000)
// 設置時間對象沒有被讀/寫訪問則對象從內存中刪除
.expireAfterWrite(100, TimeUnit.MINUTES)
//設置時間刷新緩存
.refreshAfterWrite(60,TimeUnit.SECONDS)
// 移除監聽器
.removalListener(
new RemovalListener() { @Override
public void onRemoval(RemovalNotificationrn) {handleRemove.accept(rn.getKey());
}
})
.recordStats()
.build(
new CacheLoader() {//第一次加載
@Override
public String load(Long aLong) throws Exception {return handleNotExist.apply(aLong);
}
//異步刷新(過期刷新機制,調用LoadingCache.refresh優先調用這里,未重寫則調上面load)
@Override
public ListenableFuturereload(Long aLong, String oldValue) throws Exception { ListenableFuturetask = ListenableFutureTask.creat( new Callable(){ public String call(){ //請求數據庫
return querySqlDAO(key);
}
});
refreshTaskExecutor.execute(task);
return task;
}
}
log.info("初始化緩存");
);
實現類,直接繼承抽象類后,寫對應的query和refresh函數,參數判斷,異常處理等。調用定義緩存LoadingCache的get/refresh方法,其中入參都是緩存的key,刷新會優先調用重寫的reload去更新緩存,一般都重寫為異步加載。如果reload沒有被重寫,則調用load走第一次加載的邏輯。
使用的時候直接調用實現類中對應緩存的方法即可。
參考:
https://blog.csdn.net/ABestRookie/article/details/119901114
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
分享標題:guava本地緩存CacheLoader使用-創新互聯
文章路徑:http://vcdvsql.cn/article14/deodde.html
成都網站建設公司_創新互聯,為您提供關鍵詞優化、網站制作、域名注冊、做網站、建站公司、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯