在 Java 分布式集群微服务项目中,虽然 Redis 等分布式缓存更常用,但在某些特定场景下,本地缓存依然有较好的应用价值。常用的本地缓存工具主要有以下几种:
1. Caffeine
- 简介:Caffeine 是一个现代化的高性能 Java 本地缓存库,继承了 Guava 缓存的优点,性能更优。
- 特性:
- 支持最大容量限制、基于时间的过期、基于访问频率的过期等多种淘汰策略。
- 提供异步加载缓存、缓存刷新机制,适合高频数据的缓存需求。
- 适用场景:用于高频访问的短期数据缓存(如配置项、本地会话等)。
- 代码示例:
Cache<String, Object> cache = Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).maximumSize(10_000).build();// 存取数据
cache.put("key", value);
Object value = cache.getIfPresent("key");
2. Guava Cache
- 简介:Google 提供的缓存工具,具有较强的灵活性和功能性。
- 特性:
- 支持缓存大小和过期策略、定时刷新等。
- 和 Caffeine 相似,但性能稍逊色,因此 Guava Cache 在现代 Java 项目中使用有所减少。
- 适用场景:简单缓存需求或对性能要求不太高的本地缓存需求。
- 代码示例:
Cache<String, Object> cache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).build();// 存取数据
cache.put("key", value);
Object value = cache.getIfPresent("key");
3. EHCache
- 简介:EHCache 是一个成熟的缓存框架,支持分布式缓存功能,也可以单独作为本地缓存使用。
- 特性:
- 支持缓存持久化、分布式缓存、过期策略、容量限制等功能。
- 提供丰富的配置选项,可通过 XML 或编程方式配置。
- 适用场景:适合需要缓存持久化、复杂配置的场景,也常用于单机应用。
- 代码示例:
CacheManager cacheManager = CacheManager.newInstance();
Cache cache = cacheManager.getCache("exampleCache");// 存取数据
cache.put(new Element("key", value));
Element element = cache.get("key");
Object value = element != null ? element.getObjectValue() : null;
4. Spring Boot 内置缓存(ConcurrentMapCache)
- 简介:Spring Boot 提供的轻量级本地缓存实现,基于 ConcurrentHashMap 实现。
- 特性:
- 适合小型项目或临时性缓存需求。
- 配合 @Cacheable 注解,开发体验良好,但没有自动过期和清理机制。
- 适用场景:适合小规模应用或单机场景,不适合复杂的缓存需求。
- 代码示例:
@Cacheable("exampleCache")
public String getData(String key) {return "data";
}
5. Map Struct(如 ConcurrentHashMap)
- 简介:直接使用 Java 内置的 ConcurrentHashMap 作为本地缓存实现,简单高效。
- 特性:
- 直接控制数据存取,开发简便,但没有缓存失效、淘汰策略等高级功能。
- 适用场景:适合开发阶段的临时缓存,或者一些短期数据缓存场景。
- 代码示例:
Map<String, Object> cache = new ConcurrentHashMap<>();// 存取数据
cache.put("key", value);
Object value = cache.get("key");
总结
在 Java 分布式微服务环境中,Caffeine 和 Guava Cache 是本地缓存的常用选择,Caffeine 因其高性能逐渐成为主流。而 EHCache 则适合对持久化和分布式支持要求较高的场景。如果使用 Spring 框架,简单的数据缓存可以考虑 Spring Boot 的内置缓存,开发成本较低。