Guava 与 Caffeine 本地缓存系统详解

Guava 与 Caffeine 本地缓存系统详解

☘️ Guava Cache(Google 出品)

一、简介

Guava 是 Google 开源的 Java 核心库,提供了大量工具类、集合类扩展、缓存框架等。其中 com.google.common.cache.Cache 是其缓存组件。

二、核心特性

特性描述
支持手动加载与自动加载可以使用 Cache(手动)或 LoadingCache(自动)
过期策略基于时间(写入后 / 访问后)
最大容量控制支持基于容量的逐出(eviction)
移除监听器提供 RemovalListener
统计信息缓存命中率、加载时间等统计
并发性线程安全,但并发性能一般

三、典型用法示例

LoadingCache<String, String> cache = CacheBuilder.newBuilder()
    .maximumSize(1000)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .removalListener(notification -> {
        System.out.println("移除原因:" + notification.getCause());
    })
    .build(new CacheLoader<String, String>() {
        @Override
        public String load(String key) {
            return loadDataFromDB(key);
        }
    });

// 获取值(自动加载)
String value = cache.get("key1");

// 手动放入
cache.put("key2", "value2");

⚡ Caffeine(Guava 的升级版)

一、简介

Caffeine 是 Guava Cache 的接班人,由 Ben Manes 编写,其目标是提供更高性能、更多特性、更现代化的缓存实现。

二、核心优势

特性GuavaCaffeine
性能中等极高(接近 ConcurrentHashMap)
驱逐算法LRU(近似)Window TinyLFU(更智能)
支持异步✅(AsyncLoadingCache
写入策略写入后/访问后
缓存刷新支持 refreshAfterWrite✅(异步刷新)
弱/软引用
并发性能中等极好(基于分段机制)

三、核心用法示例

1. 同步加载缓存
LoadingCache<String, String> cache = Caffeine.newBuilder()
    .maximumSize(1000)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .removalListener((String key, String value, RemovalCause cause) ->
        System.out.println("被移除 key=" + key + ", 原因=" + cause))
    .build(key -> loadDataFromDB(key));
2. 异步缓存(AsyncLoadingCache)
AsyncLoadingCache<String, String> asyncCache = Caffeine.newBuilder()
    .maximumSize(1000)
    .expireAfterWrite(10, TimeUnit.MINUTES)
    .buildAsync(key -> CompletableFuture.supplyAsync(() -> loadDataFromDB(key)));

📊 Guava vs Caffeine 性能对比

  • Caffeine 的 TinyLFU 驱逐算法可以在高并发和高命中率下表现极佳。
  • 在 benchmark 中,Caffeine 的性能大约是 Guava 的 2~20 倍,特别是在多线程环境下优势更明显。

🧠 使用建议

使用场景推荐缓存库原因
单线程、轻量级缓存Guava实现简单、依赖少
高并发、性能敏感Caffeine极致性能、更强策略
需要异步加载CaffeineGuava 不支持异步加载
简单本地缓存Guava快速上手,文档齐全
大量数据缓存+智能淘汰Caffeine支持 TinyLFU,更智能

🔧 典型配置参数对比

参数名GuavaCaffeine
maximumSize
expireAfterAccess
expireAfterWrite
refreshAfterWrite
weakKeys / softValues
removalListener
recordStats()
build() / buildAsync()✅(同步)✅(支持异步)

📝 结语

  • Guava:适合一般场景,轻量级需求、快速接入。
  • Caffeine:适合高并发、对性能有严格要求的项目,是目前 Java 生态最强大的本地缓存方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_Geo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值