java对象如何缓存
Java对象缓存的实现方法
使用Java内置缓存机制
Java提供了WeakReference和SoftReference类,用于实现对象的软引用和弱引用缓存。软引用在内存不足时会被回收,弱引用在GC时会被回收。适合用于非关键数据的缓存。
Map<String, SoftReference<Object>> cache = new HashMap<>();
cache.put("key", new SoftReference<>(object));
Object cached = cache.get("key").get();
使用Guava Cache
Google Guava库提供了强大的缓存实现,支持多种过期策略和缓存回收机制。适合需要LRU淘汰策略的场景。

Cache<String, Object> cache = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build();
cache.put("key", object);
Object cached = cache.getIfPresent("key");
使用Caffeine缓存
Caffeine是现代Java应用的高性能缓存库,相比Guava Cache有更好的性能。适合高并发场景。

Cache<String, Object> cache = Caffeine.newBuilder()
.maximumSize(10_000)
.expireAfterWrite(5, TimeUnit.MINUTES)
.build();
cache.put("key", object);
Object cached = cache.getIfPresent("key");
使用Ehcache
Ehcache是成熟的Java缓存框架,支持磁盘持久化和分布式缓存。适合企业级应用。
CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();
cacheManager.init();
Cache<String, Object> cache = cacheManager.createCache("myCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(
String.class, Object.class, ResourcePoolsBuilder.heap(100)));
cache.put("key", object);
Object cached = cache.get("key");
使用Redis分布式缓存
当应用需要跨JVM共享缓存时,Redis是最常用的解决方案。适合分布式系统。
JedisPool pool = new JedisPool("localhost");
try (Jedis jedis = pool.getResource()) {
jedis.set("key", objectToString(object));
String cached = jedis.get("key");
}
缓存策略选择
对象缓存需要考虑缓存大小、过期时间、更新策略等因素。高频访问但变化少的数据适合缓存,变化频繁或一致性要求高的数据应谨慎使用缓存。建议根据具体场景选择合适的缓存实现和配置参数。






