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

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

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 相关产品和应用

全部下载

专题列表