技术派Guava整合本地缓存
大家好,我是技术派的二哥呀。
今天由我来给大家讲一下技术派是如何整合本地缓存 Guava 的。要知道,互联网应用一般都比较喜欢追求高并发,高可用,因此,缓存的地位可以说是举足轻重,对程序的性能提升有很大的帮助。
技术派是一个 Spring Boot 项目,那 Spring Boot 也提供了多种技术方案来支持缓存,常见的有以下几种:
1、Redis:基于网络的分布式缓存,可以支持数据持久化和分布式部署,适用于海量数据的缓存,同时也提供了复杂数据类型和丰富的缓存策略,比如支持 LRU(Least Recently Used,优先淘汰最近最少使用的数据)、LFU(Least Frequently Used,优先淘汰最不经常使用的缓存数据)等淘汰算法。但是由于 Redis 是基于网络通信的,相比本地缓存会有一定的网络延迟。
2、Guava Cache:也就是本篇的猪脚,一个轻量级的本地缓存库,提供了多种缓存策略,包括基于大小、时间和引用的回收策略。数据存储在应用程序的内存中,因此读写速度非常快,适用于高并发、读多写少的场景。
3、Caffeine:一个基于Java8的高性能本地缓存库,可以作为Guava缓存的替代品使用。
在技术派中,这三种缓存方案都涉及到了,我们也会展开来讲,大家放心,包教包会,是我们的职责。
关于 Guava
Guava 是 Google 开源的一款 Java 工具库,提供了一些 JDK 没有或者增强 JDK 的个功能,比如说:
- com.google.common.collect: 集合工具包,提供了许多 JDK 中没有的集合类型和集合操作方法。
- com.google.common.io: I/O 工具包,提供了许多实用的 I/O 操作类和工具方法。
- com.google.common.cache: 缓存工具包,提供了一个高性能的本地缓存实现。
- com.google.common.math: 数学工具包,提供了许多数学计算和运算的实用方法。
- com.google.common.eventbus: 事件总线工具包,提供了基于观察者模式的事件发布和订阅功能。
- com.google.common.reflect: 反射工具包,提供了更好用的反射 API。
- com.google.common.util.concurrent: 并发工具包,提供了许多 JDK 并发包中没有的并发实用工具类和工具方法。
可以看得出,Guava 非常的强大,Cache只是其中的一部分功能而已。
那如何在 Spring Boot 应用中整合 Guava Cache 呢?早期版本有两种方式,一种是使用 GuavaCacheManager,一种是使用 CacheBuilder。
使用 GuavaCacheManager
在 Spring Boot 早期版本中,集成 Guava Cache 非常的简单,因为 Spring 定义了 CacheManager 接口来统一不同的缓存技术,比如说 Guava、 Redis、Caffeine。
- GuavaCacheManager:使用 Guava 作为缓存技术
- RedisCacheManager:使用 Redis 作为缓存技术
- CaffeineCacheManager:使用 Caffeine 作为缓存技术
- ConcurrentMapCacheManager:Spring Boot 默认的缓存实现
我们重点来说说 GuavaCacheManager,它提供了一种基于注解的缓存管理方式,通过在方法上加上 @Cacheable、@CachePut、@CacheEvict 等注解,实现对方法返回结果的缓存。
- @Cacheable: 在方法执行前,Spring 会检查缓存中是否已存在相同 key 的缓存数据,如果存在,直接返回缓存数据,如果不存在,则执行方法并将返回结果缓存起来。
- @CachePut: 无论缓存中是否已存在相同 key 的缓存数据,都会执行方法并将返回结果缓存起来,用于更新缓存数据。
- @CacheEvict: 用于删除指定 key 的缓存数据。
不过,Spring Boot 2.7.1 版本已经把 GuavaCacheManager 移除了,取而代之的是 CaffeineCacheManager。见下图,在 Spring 中已经找不到 GuavaCacheManager 的身影了(技术派用的 Spring Boot 是 2.7.1 版本,具体是哪个 Spring Boot 版本移除的,这里不再考究)。

总之是,如果我们还想用 Guava Cache 做缓存,就需要采用 CacheBuilder 的形式,接下来,我们来看看到底怎么用,少说废话多做事(😂)
使用 CacheBuilder
1)在 pom.xml 中添加依赖
技术派是添加在 paicoding-core 中的 pom.xml 文件中。
com.google.guava
guava
2)来个 demo
// 创建一个 CacheBuilder 对象
CacheBuilder
CacheBuilder 是 Guava Cache中用于构建本地缓存的构造器,通过CacheBuilder可以配置缓存的各种属性,如最大缓存项数量、缓存项过期时间、缓存项移除通知等。
下面介绍几个常用的 CacheBuilder 方法:
①、newBuilder()
该方法返回一个 CacheBuilder 实例,用于创建一个新的缓存实例。
②、maximumSize(long maximumSize)
该方法用于设置缓存的最大大小,以条目数为单位。如果缓存中的条目数超过了最大大小,则可能会触发缓存的回收策略,以释放一些缓存空间。
③、expireAfterWrite(long duration, TimeUnit unit)
该方法用于设置缓存的过期时间。在缓存中存储的每个条目被创建或者更新后,经过指定的时间后,该条目将被自动删除。可以使用 TimeUnit 枚举类型中的常量来指定时间单位,比如 TimeUnit.SECONDS、TimeUnit.MINUTES 等。
④、expireAfterAccess(long duration, TimeU...
未能定位到原文的划线
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复