在 Java 中,**缓存(Cache)**是提升系统性能最常用的手段之一。其核心思想是:用空间换时间,避免重复计算或重复 IO。
下面从原理、常见方式、使用场景、示例代码和注意事项几个角度来说明。
性能瓶颈通常来自:
缓存的作用:
特点
常见实现
HashMap(最简单)Guava CacheCaffeine(推荐,性能最好)示例(Caffeine)
Cache<String, String> cache = Caffeine.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build();
String value = cache.get("key", k -> queryFromDB(k));
✅ 适合:配置信息、热点数据、计算结果
特点
常见实现
示例(Redis)
String value = redis.get("user:1");
if (value == null) {
value = queryFromDB(1);
redis.setex("user:1", 3600, value);
}
✅ 适合:用户会话、商品信息、排行榜
特点
示例
@Cacheable(value = "user", key = "#id")
public User getUserById(Long id) {
return userMapper.selectById(id);
}
支持:
@Cacheable@CachePut@CacheEvict底层可用:
虽然不是 Java 层,但整体性能提升明显。
问题:查询不存在的数据,直接打数据库
解决:
问题:大量 key 同时失效
解决:
问题:热点 key 失效瞬间高并发
解决:
| 操作 | 耗时 |
|---|---|
| 数据库查询 | 10–50 ms |
| Redis | 1–3 ms |
| 本地缓存 | 0.01–0.1 ms |
Java 缓存提升性能的本质,是把“慢操作”变成“快内存访问”,同时控制好一致性和失效策略。
如果你愿意,我可以:
你更想看哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。