GuaVa緩存應用


LoadingCache<String, List<Order>> cacheOrders = CacheBuilder.newBuilder()
.expireAfterWrite(1, TimeUnit.MINUTES)//表示在寫入內存1分鍾后該數據過期
.expireAfterAccess(1, TimeUnit.MINUTES)//表示如果1分鍾之內沒有使用該緩存則數據過期 每調用一次緩存有效時間都刷新為一分鍾
.refreshAfterWrite(1, TimeUnit.MINUTES)//只阻塞當前數據加載線程,其他線程返回舊值
.concurrencyLevel(8)//設置並發級別為8,並發級別是指可以同時寫緩存的線程數
.maximumSize(100)//設置最大緩存數 超過限制采用最少使用淘汰機制
.build(new CacheLoader<String, List<Order>>() {
            /**  當本地緩存命沒有中時,調用load方法獲取結果並將結果緩存
*/
@Override
public List<Order> load(String key) {
return getOrders();
}

// 此時一般我們會進行相關處理,如到數據庫去查詢
private List<Order> getOrders() {
List<Order> orderList = (List<Order>) redisUtil.hmGet(redisTemplate, ControlConstants.RTB_OF_ORDER, ControlConstants.DSP_RTB_AREA_DEAL);
log.info("緩存失效重新獲取訂單" + orderList.size());
return orderList;

}
});

當然,除此之外,緩存還有其他初始化設置,例如設置要統計緩存的命中率等,guava的緩存還可以以異步線程的方式刷新本地的緩存,這里不做詳細說明


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM