Spring Boot 集成 Caffeine 本地缓存配置指南

沈知远
沈知远
发布时间:2026-10-13| 5人浏览过
原创

Caffeine 是一个基于 Java 8 StampedLock 的高性能本地缓存库,相比 Ehcache 和 Redis,它完全在进程内运行,无网络开销且无需对象序列化。本文将指导如何在 Spring Boot 应用中通过 SimpleCacheManager 集成 Caffeine,实现不同 TTL(生存时间)的多种缓存命名空间配置。

Caffeine 与常用缓存对比

在架构选型时,理解本地缓存与分布式缓存的区别至关重要。Caffeine 作为内存型缓存,其数据存储在 JVM 堆内存中,应用重启即丢失。以下是它与 Redis、EhCache 的核心差异:

特性RedisEhCacheCaffeine
序列化需求必须实现可选(若持久化则需)不需要
进程关系独立进程附着于业务进程附着于业务进程
存储介质内存 + 磁盘内存 / 磁盘纯内存

JDK 原生 Map 虽可作为临时存储,但缺乏自动过期和淘汰机制,不适合正式缓存场景。Caffeine 作为 Guava Cache 的改进版,提供了更优秀的并发控制和淘汰策略。

Spring Boot 集成步骤

第1步:引入依赖

首先需要引入 Caffeine 核心库以及 Spring Context Support 以支持注解驱动缓存。建议使用较新的 Spring Boot 版本自带的管理依赖:

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>

第2步:全局启用 Caffeine

在 application.yml 或 properties 中指定 Spring Cache 的实现类型为 caffeine,这将告诉 Spring 使用默认的管理器进行缓存操作:

spring:
  cache:
    type: caffeine

第3步:自定义多 CacheName 配置

不同的业务模块通常对缓存时效性有不同要求。通过注册 SimpleCacheManager 并为每个缓存实例绑定不同的 Caffeine 构建器,可以实现精细化的控制。

首先定义常量类用于区分不同的缓存区域:

public interface CacheNameTimeConstant {
    String CACHE_DEFAULT = "CACHE_DEFAULT";
    String CACHE_5SECS = "CACHE_5SECS";
    String CACHE_10SECS = "CACHE_10SECS";
    String CACHE_60SECS = "CACHE_60SECS";
}

随后,创建 Bean 来配置具体的缓存管理器,这里演示了三种不同过期时间的配置:

@Bean
public CacheManager caffeineCacheManager() {
    SimpleCacheManager cacheManager = new SimpleCacheManager();
    List<CaffeineCache> caches = new ArrayList<>();
    
    // 配置5秒过期的缓存
    caches.add(new CaffeineCache(
        CacheNameTimeConstant.CACHE_5SECS, 
        Caffeine.newBuilder().expireAfterWrite(5, TimeUnit.SECONDS).build()
    ));
    
    // 配置10秒过期的缓存
    caches.add(new CaffeineCache(
        CacheNameTimeConstant.CACHE_10SECS, 
        Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).build()
    ));
    
    // 配置30秒过期的缓存
    caches.add(new CaffeineCache(
        CacheNameTimeConstant.CACHE_30SECS, 
        Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).build()
    ));
    
    cacheManager.setCaches(caches);
    return cacheManager;
}

使用注意事项

由于 Caffeine 是本地内存缓存,不经过网络传输,因此存入其中的实体对象无需实现 Serializable 接口,这简化了代码开发。但如果未来需要对接多级缓存(如 Redis),则需注意这部分对象在不同缓存层级间的序列化一致性。

以上就是通过 Spring Cache 注解结合 Caffeine 实现高性能本地缓存的详细配置过程,开发者可根据实际业务场景调整过期时间和缓存大小限制。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。