Java学习第一百零五部分——Caffeine

目录

一、前言简介

二、核心特性

三、使用方式

四、缓存驱逐策略

五、与Guava Cache对比

六、典型应用场景

七、依赖添加——基于Maven

八、总结归纳


一、前言简介

       Java Caffeine 是一个基于 Java 8 的高性能本地缓存库,由 Google Guava Cache 改进而来,被 Spring 5(及 Spring Boot 2.x)选为默认缓存组件,替代了 Guava Cache。它通过先进的算法和灵活的配置,显著提升缓存命中率,适用于高并发场景。

二、核心特性

1. 高性能算法

  • 采用Window TinyLFU 算法(结合 LRU 和 LFU 的优势),在读写密集场景下命中率接近最优,性能远超 Guava Cache 和 Ehcache。

  • 无锁并发设计(如 `StampedLock`),支持高并发访问。

2. 灵活的驱逐策略

  • 基于容量:通过 `maximumSize` 限制条目数量,超出时自动淘汰低频数据。

  • 基于时间:支持 `expireAfterWrite`(写入后过期)和 `expireAfterAccess`(访问后过期)。

  • 基于引用:可用 `weakKeys`/`weakValues`(弱引用)或 `softValues`(软引用)依赖 GC 回收内存。

3. 异步加载与刷新

  • 支持同步/异步加载数据(如 `CacheLoader`),避免缓存穿透。

  • 通过 `refreshAfterWrite` 后台刷新旧数据,访问时返回旧值并触发异步更新。

4. 事件监听与统计  

  • 提供 `removalListener` 监听条目移除事件(如过期、手动删除)。

  • 启用 `recordStats()` 可统计命中率、加载次数等指标。

三、使用方式

加载方式特点示例代码
手动加载显式调用 put() 和 getIfPresent()Cache<String, String> cache = Caffeine.newBuilder().build();
cache.put("k1", "v1");
自动加载通过 CacheLoader 自动加载缺失数据LoadingCache<String, String> cache = Caffeine.newBuilder()
.build(key -> loadFromDB(key));
异步手动加载返回 CompletableFuture,非阻塞获取结果AsyncCache<String, String> asyncCache = Caffeine.newBuilder().buildAsync();
asyncCache.get(key, k -> loadAsync(k));
异步自动加载结合异步加载与自动刷新,适合高延迟数据源AsyncLoadingCache<String, String> cache = Caffeine.newBuilder()
.buildAsync(key -> loadAsync(key));

四、缓存驱逐策略

  • 容量驱逐:`maximumSize` 限制条目数(默认使用 W-TinyLFU 淘汰低频数据)。

  • 时间驱逐:

    .expireAfterWrite(10, TimeUnit.MINUTES)  // 写入后10分钟过期
    .expireAfterAccess(5, TimeUnit.MINUTES)  // 访问后5分钟过期
  • 引用驱逐:通过 `weakKeys().softValues()` 结合 GC 回收(性能较差,慎用)。

五、与Guava Cache对比

特性CaffeineGuava Cache
算法Window TinyLFU(高命中率)LRU(易受突发流量影响)
立即失效处理正确识别 expireAfterAccess(0)转换为 maximumSize=0
异步支持内置异步刷新和加载无原生异步刷新
性能读写吞吐量提升 30% 以上较低

六、典型应用场景

  • Web 应用:缓存用户会话、频繁查询的数据库结果(如用户信息)。

  • 微服务架构:作为本地缓存与 Redis 等分布式缓存组成多级缓存,减轻网络压力。

  • 高并发系统:减少重复计算,例如缓存中间结果或热点数据。

七、依赖添加——基于Maven

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.1.8</version> <!-- 2025年最新版 -->
</dependency>

八、总结归纳

      Caffeine 凭借其高性能、灵活的配置和接近最优的命中率,成为 Java 本地缓存的首选方案。尤其适合需要低延迟、高并发的场景,如电商秒杀、实时数据分析等,其设计平衡了内存占用与访问效率,是优化系统性能的利器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值