Guava Cache简介
2026/1/15大约 3 分钟JavaGuava缓存本地缓存后端
Guava Cache简介
什么是 Guava Cache
Guava Cache 是 Google Guava 库提供的本地缓存实现,它提供了一种简单、高效的方式来缓存数据,减少重复计算或远程调用的开销。
为什么使用本地缓存
本地缓存 vs 分布式缓存
| 特性 | 本地缓存 | 分布式缓存 |
|---|---|---|
| 访问速度 | 纳秒级 | 毫秒级 |
| 网络开销 | 无 | 有 |
| 数据一致性 | 单机一致 | 需要同步 |
| 容量限制 | 受 JVM 内存限制 | 可水平扩展 |
| 适用场景 | 热点数据、配置信息 | 共享数据、会话信息 |
适用场景
- 热点数据缓存 - 频繁访问的数据
- 计算结果缓存 - 避免重复计算
- 配置信息缓存 - 减少配置读取开销
- 接口限流 - 基于缓存的计数器
- 数据预热 - 提前加载常用数据
核心特性
1. 自动加载
LoadingCache<String, User> cache = CacheBuilder.newBuilder()
.build(new CacheLoader<String, User>() {
@Override
public User load(String userId) {
// 缓存未命中时自动调用
return userService.getById(userId);
}
});
// 自动加载数据
User user = cache.get("user-123");2. 多种过期策略
CacheBuilder.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES) // 写入后过期
.expireAfterAccess(5, TimeUnit.MINUTES) // 访问后过期
.maximumSize(1000) // 最大条目数
.maximumWeight(10000) // 最大权重
.build();3. 缓存统计
Cache<String, Object> cache = CacheBuilder.newBuilder()
.recordStats() // 开启统计
.build();
CacheStats stats = cache.stats();
System.out.println("命中率: " + stats.hitRate());
System.out.println("加载次数: " + stats.loadCount());
System.out.println("平均加载时间: " + stats.averageLoadPenalty());4. 移除监听
CacheBuilder.newBuilder()
.removalListener(notification -> {
System.out.println("Key: " + notification.getKey() +
" 被移除,原因: " + notification.getCause());
})
.build();快速开始
添加依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.1.3-jre</version>
</dependency>基本使用
import com.google.common.cache.*;
public class GuavaCacheDemo {
public static void main(String[] args) throws Exception {
// 创建缓存
LoadingCache<String, String> cache = CacheBuilder.newBuilder()
.maximumSize(100) // 最大缓存条目
.expireAfterWrite(10, TimeUnit.MINUTES) // 写入10分钟后过期
.recordStats() // 开启统计
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) {
// 模拟从数据库加载
return "value-" + key;
}
});
// 获取数据(自动加载)
String value = cache.get("key1");
System.out.println("Value: " + value);
// 手动放入
cache.put("key2", "manual-value");
// 获取统计信息
System.out.println("命中率: " + cache.stats().hitRate());
}
}Guava Cache vs 其他缓存
| 特性 | Guava Cache | Caffeine | Ehcache |
|---|---|---|---|
| 性能 | 高 | 更高 | 中 |
| 功能丰富度 | 中 | 中 | 高 |
| 内存占用 | 低 | 低 | 中 |
| 持久化 | 不支持 | 不支持 | 支持 |
| 分布式 | 不支持 | 不支持 | 支持 |
| 维护状态 | 维护中 | 活跃 | 活跃 |
提示
Caffeine 是 Guava Cache 的升级版,API 兼容,性能更优。新项目推荐使用 Caffeine。
小结
Guava Cache 是一个简单高效的本地缓存实现,提供了自动加载、多种过期策略、缓存统计等功能。它适合用于缓存热点数据、计算结果等场景。
面试题预览
常见面试题
- Guava Cache 和 ConcurrentHashMap 有什么区别?
- Guava Cache 的过期策略有哪些?
- 如何监控 Guava Cache 的命中率?
