LoadingCache
?是 Google Guava 庫提供的一個高級緩存實現,它通過自動加載機制簡化了緩存使用模式。
核心特性
自動加載機制
當緩存未命中時,自動調用指定的?
CacheLoader
?加載數據線程安全:并發請求下,相同key只會加載一次
靈活的過期策略
支持基于寫入時間(
expireAfterWrite
)和訪問時間(expireAfterAccess
)的過期可設置最大緩存大小,基于LRU策略淘汰
豐富的統計功能
可記錄命中率、加載異常等指標
通過?
CacheStats
?對象提供詳細統計數據
典型使用場景
優惠券模板緩存實現
LoadingCache<Long, Optional<CouponTemplate>> couponCache = CacheBuilder.newBuilder().maximumSize(10000).expireAfterWrite(10, TimeUnit.MINUTES).build(new CacheLoader<Long, Optional<CouponTemplate>>() {@Overridepublic Optional<CouponTemplate> load(Long templateId) {// 數據庫查詢邏輯CouponTemplate template = couponDao.findById(templateId);return Optional.ofNullable(template);}});
性能關鍵場景優勢
零拷貝訪問:緩存數據直接存儲在JVM堆內存中
高吞吐量:單機可達10萬+ QPS
低延遲:讀取操作通常在微秒級完成
高級功能
刷新機制
// 單個key刷新
cache.refresh(key);// 批量刷新
cache.refreshAll(keys);
統計功能啟用
CacheBuilder.newBuilder().recordStats() // 啟用統計.build(loader);// 獲取統計信息
CacheStats stats = cache.stats();
double hitRate = stats.hitRate(); // 命中率
注意事項
內存管理
需要合理設置?
maximumSize
?防止OOM對于大對象考慮使用軟/弱引用
異常處理
load
?方法拋出異常會被緩存建議返回?
Optional
?包裝空值分布式環境
本地緩存不適用于多節點場景
可考慮與Redis組成多級緩存
LoadingCache特別適合單機、高頻讀取、數據量可控的場景,是提升系統性能的利器。