Caffeine-05-Caffeine cache 核心方法
2018年9月10日大约 2 分钟
chat
Caffeine Cache 作为高性能 Java 本地缓存库,提供了四类核心缓存实例,每种类型对应不同的加载策略和方法。
以下是其核心方法分类说明:
⚙️ 1. 手动加载缓存(Cache
)
通过 Caffeine.newBuilder().build()
创建,需显式管理缓存条目。
getIfPresent(K key)
:若缓存存在 key,返回值;否则返回null
。get(K key, Function loader)
:若 key 不存在,通过loader
函数计算值并缓存,原子操作避免竞争。put(K key, V value)
:添加或覆盖键值对。invalidate(K key)
:移除指定 key 的缓存项。invalidateAll()
:清空所有缓存。asMap()
:返回ConcurrentMap
视图,支持标准 Map 操作(如putIfAbsent()
)。
🔄 2. 同步加载缓存(LoadingCache
)
通过 build(CacheLoader)
创建,自动加载缺失值。
get(K key)
:若 key 不存在,调用CacheLoader.load()
加载值(如从数据库)并缓存。getAll(Iterable keys)
:批量获取值,缺失时调用loadAll()
(未实现则遍历load()
)。refresh(K key)
:异步刷新值(不阻塞当前请求,旧值仍可用)。
⏳ 3. 异步缓存(AsyncCache
)
通过 buildAsync()
创建,返回 CompletableFuture
支持非阻塞操作。
getIfPresent(K key)
:返回CompletableFuture
,若 key 不存在返回null
。get(K key, Function loader)
:异步执行loader
函数计算值并缓存。put(K key, CompletableFuture value)
:缓存Future
类型值。synchronous()
:转为同步Cache
视图。
⚡️ 4. 异步加载缓存(AsyncLoadingCache
)
通过 buildAsync(CacheLoader)
创建,结合自动加载与异步特性。
get(K key)
:返回CompletableFuture
,自动异步调用CacheLoader.load()
。getAll(Iterable keys)
:批量返回CompletableFuture
。synchronous()
:转为同步LoadingCache
视图。
📊 公共方法与工具
estimatedSize()
:返回缓存条目数的估计值(非精确)。stats()
:返回CacheStats
对象,含命中率、加载次数等统计信息。policy()
:提供策略查询(如淘汰策略eviction()
)。
💎 核心方法总结表
缓存类型 | 核心方法 | 功能描述 |
---|---|---|
Cache | getIfPresent(key) | 直接查询缓存,不存在返回 null |
get(key, loader) | 不存在时通过函数计算并原子写入 | |
put(key, value) | 显式添加或覆盖缓存 | |
LoadingCache | get(key) | 自动同步加载缺失值(阻塞直到加载完成) |
getAll(keys) | 批量加载缺失值 | |
AsyncCache | get(key, loader) | 异步执行函数计算值(非阻塞) |
getIfPresent(key) | 返回 Future ,缓存不存在时为 null | |
AsyncLoadingCache | get(key) | 自动异步加载缺失值(返回 Future ) |
💡 使用建议
- 突发流量场景:优先选用
AsyncCache
或AsyncLoadingCache
,避免线程阻塞。 - 数据库集成:
LoadingCache
的get()
适合封装数据库查询逻辑。 - 批量操作:
getAll()
可减少加载次数,需实现CacheLoader.loadAll()
优化。
完整方法列表详见 Caffeine GitHub Wiki 或 Spring Boot 集成示例。
参考资料
贡献者
binbin.hou