当前位置: 首页 > news >正文

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>() {@Overridepublic 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 生态最强大的本地缓存方案。
http://www.dtcms.com/a/315433.html

相关文章:

  • jQuery DOM节点操作详解
  • stm32F407 硬件COM事件触发六步换相
  • AI医疗革命:十大应用场景如何重塑未来医疗
  • 手绘风格制图新选择:如何用Excalidraw+cpolar构建你的视觉化工作流?
  • windos10 安装CentOS7 虚拟机笔记
  • Datawhale AI夏令营 第三期 task2
  • 基于ZYNQ ARM+FPGA的声呐数据采集系统设计
  • 01数据结构-平衡二叉树
  • Prometheus监控学习-安装
  • 【Git】实现使用SSH方式连接远程仓库时的免密操作
  • 计算机网络:目的网络在路由表项中的作用
  • Python实战项目--学生成绩管理系统
  • 机器人slam个人笔记
  • 交叉验证:机器学习模型评估的“稳压器”——从原理到实战
  • 测试开发:Python+Django实现接口测试工具
  • AI 对话高效输入指令攻略(四):AI+Apache ECharts:生成各种专业图表
  • 第六章 道阻且艰(2025.7学习总结)
  • 期权定价全解析:从Black-Scholes到量子革命的金融基石
  • 利用Coze平台生成测试用例
  • 发票的分类识别与查验接口-发票管理软件-发票查验API
  • C++返回值优化(RVO):高效返回对象的艺术
  • 《算法导论》第 2 章 - 算法基础
  • spring webflux链路跟踪【traceId日志自动打印】
  • 【Spring Boot 快速入门】七、阿里云 OSS 文件上传
  • 从零实现富文本编辑器#6-浏览器选区与编辑器选区模型同步
  • dos中常用的全屏幕编辑器
  • 一次“无告警”的服务器宕机分析:从无迹可寻到精准定位
  • 服务器数据恢复—坏道致Raid5阵列硬盘离线如何让数据重生?
  • 【Electron】electron-vite中基于electron-builder与electron-updater实现程序远程自动更新,附源码
  • 前端性能工程化:构建高性能Web应用的系统化实践