当前位置: 首页 > 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.lryc.cn/news/611327.html

相关文章:

  • Windows 11 使用Windows Hello使用人脸识别登录失败,重新录入人脸识别输入PIN后报Windows Hello安装程序白屏无响应的问题解决
  • nodejs 编码初体验
  • 艺术性与真实感并存:FLUX.1 Krea [dev] 开源模型速览
  • muc中的电压调节和电源控制回路?
  • 网络相关(AI回答)
  • Linux的NFS与Autofs配置指南
  • linux定时器管理 timer_*系统调用及示例
  • table行内--图片预览--image
  • 并发编程的三要素是什么
  • Claude Code实战体验:AI智能编程助手如何重塑开发工作流?
  • 鸿蒙开发--web组件
  • Spring之【详解FactoryBean】
  • 深度学习-卷积神经网络CNN-填充与步幅
  • 27-数据仓库与Apache Hive-2
  • 二维树状数组
  • 机器学习之线性回归与逻辑回归
  • 广州客户 戴尔R720服务器 liunx系统 RAID5无损升级扩容
  • 【递归完全搜索】USACO Bronze 2023 January - 牛栏降温 IIAir Cownditioning II
  • WordPress如何实现隐藏文章部分内容?WordPress无法解析[hide]...[/hide]这类短代码怎么办?
  • 深度清理C盘!adsC盘清理大师实现原理与技术解析
  • 2025《艾诺提亚失落之歌》逆向工程解包尝试
  • 一个小巧神奇的 USB数据线检测仪
  • SpringCloud学习-------Feign详解
  • PageHelper分页插件
  • makefile使用及双向链表
  • 在X86架构Linux中创建虚拟根目录并下载指定架构(如aarch64)的软件包(含依赖)
  • 数字图像处理(冈萨雷斯)第三版:第四章——频率域滤波(学前了解知识)——主要内容和重点
  • 深信服GO面试题及参考答案(下)
  • 数据结构基础:链表(2)——双向链表、循环链表、内核链表
  • GoLand 项目从 0 到 1:第五天 —— 角色权限中间件实现与事务控制