SpringBoot3.x集成 Caffeine 缓存框架官方指南

 更新时间:2026年06月09日 08:54:44   作者:猿与禅  
本文主要介绍了SpringBoot3.x集成 Caffeine 缓存框架官方指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

概述

本指南基于官方文档,详细说明如何在 Spring Boot 3.x 中集成和使用 Caffeine 缓存框架。

1. Spring Boot 官方文档中关于 Caffeine 缓存的集成指南

1.1 基本集成

Spring Boot 自动配置缓存基础设施,只要启用缓存支持并使用 @EnableCaching 注解即可 [0†]。

如果类路径中存在 Caffeine,Spring Boot 会自动配置 CaffeineCacheManager(由 spring-boot-starter-cache 启动器提供)[0†]。

1.2 依赖配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.2.3</version>
</dependency>

1.3 启用缓存

在配置类上添加 @EnableCaching 注解:

@Configuration
@EnableCaching
public class CacheConfig {
}

1.4 缓存配置

Spring Boot 允许通过多种方式配置 Caffeine 缓存 [0†]:

1.4.1 使用缓存规范

通过 spring.cache.caffeine.spec 属性配置:

spring.cache.cache-names=cache1,cache2
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s

1.4.2 自定义 Bean

定义 CaffeineSpec Bean:

@Bean
public CaffeineSpec caffeineSpec() {
    return CaffeineSpec.parse("maximumSize=1000,expireAfterWrite=5m");
}

1.4.3 配置 CacheLoader

如果定义了 CacheLoader Bean,它会自动关联到 CaffeineCacheManager

@Bean
public CacheLoader<Object, Object> cacheLoader() {
    return new CacheLoader<Object, Object>() {
        @Override
        public Object load(Object key) throws Exception {
            // 加载逻辑
            return null;
        }
    };
}

1.5 缓存管理器自定义

通过 CacheManagerCustomizer 接口自定义缓存管理器行为:

@Bean
public CacheManagerCustomizer<ConcurrentMapCacheManager> cacheManagerCustomizer() {
    return (cacheManager) -> cacheManager.setAllowNullValues(false);
}

2. 核心注解使用

2.1 @Cacheable

用于标记方法的结果应该被缓存 [8†]:

@Service
public class UserService {
    
    @Cacheable(value = "users", key = "#id")
    public User findById(Long id) {
        // 查询逻辑
        return user;
    }
}

2.2 @CachePut

更新缓存但不阻止方法执行:

@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {
    // 更新逻辑
    return user;
}

2.3 @CacheEvict

从缓存中移除条目:

@CacheEvict(value = "users", key = "#id")
public void deleteUser(Long id) {
    // 删除逻辑
}

3. Caffeine 官方文档中关于 Spring Boot 集成的说明

3.1 JCache 集成

Caffeine 提供 JSR-107 (JCache) 标准接口的实现 [41†]。通过 JCache,可以在不同缓存实现之间轻松切换。

3.2 Spring 集成

Caffeine 通过 JCache 提供了对 Spring 的集成支持。Spring Cache 从 4.3 版本和 Spring Boot 1.4 版本开始支持 Caffeine [41†]。

3.3 配置示例

@Configuration
@EnableCaching
public class CaffeineCacheConfig {
    
    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
            .maximumSize(1000)
            .expireAfterWrite(Duration.ofMinutes(5))
            .recordStats());
        return cacheManager;
    }
}

4. 官方 GitHub 仓库相关信息

4.1 Caffeine 项目信息

Caffeine 是一个高性能的缓存库,提供了接近最优的命中率 [3†]。

主要特性

  • 自动加载条目到缓存
  • 基于大小和时间的驱逐策略
  • 异步刷新支持
  • 统计信息收集

4.2 项目地址

4.3 集成支持

Caffeine 提供了多种框架集成:

  • Spring Cache(从 Spring 4.3 和 Boot 1.4 开始)
  • JCache (JSR-107)
  • Guava 适配器 [3†]

5. 完整示例

5.1 实体类

@Entity
public class Product {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private BigDecimal price;
    // getters and setters
}

5.2 Repository 层

public interface ProductRepository extends JpaRepository<Product, Long> {
}

5.3 Service 层

@Service
@CacheConfig(cacheNames = "products")
public class ProductService {
    
    @Autowired
    private ProductRepository productRepository;
    
    @Cacheable(key = "#id")
    public Product findById(Long id) {
        return productRepository.findById(id).orElse(null);
    }
    
    @Cacheable(key = "'all'")
    public List<Product> findAll() {
        return productRepository.findAll();
    }
    
    @CachePut(key = "#product.id")
    public Product save(Product product) {
        return productRepository.save(product);
    }
    
    @CacheEvict(key = "#id")
    public void deleteById(Long id) {
        productRepository.deleteById(id);
    }
}

5.4 应用配置

# application.properties

# 启用缓存
spring.cache.type=caffeine

# 配置缓存名称
spring.cache.cache-names=products,users

# Caffeine 特定配置
spring.cache.caffeine.spec=maximumSize=1000,expireAfterWrite=10m,recordStats

6. 高级配置

6.1 多缓存配置

@Configuration
@EnableCaching
public class AdvancedCacheConfig {
    
    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        
        // 配置产品缓存
        cacheManager.registerCache("products", Caffeine.newBuilder()
            .maximumSize(1000)
            .expireAfterWrite(Duration.ofMinutes(10))
            .recordStats()
            .build());
        
        // 配置用户缓存
        cacheManager.registerCache("users", Caffeine.newBuilder()
            .maximumSize(500)
            .expireAfterAccess(Duration.ofMinutes(5))
            .recordStats()
            .build());
        
        return cacheManager;
    }
}

6.2 缓存统计

启用统计功能以监控缓存性能:

@Bean
public CacheManager cacheManager() {
    CaffeineCacheManager cacheManager = new CaffeineCacheManager();
    cacheManager.setCaffeine(Caffeine.newBuilder()
        .maximumSize(1000)
        .expireAfterWrite(Duration.ofMinutes(5))
        .recordStats());  // 启用统计
    return cacheManager;
}

6.3 条件缓存

@Cacheable(value = "products", condition = "#id != null && #id > 0")
public Product findById(Long id) {
    return productRepository.findById(id).orElse(null);
}

7. 最佳实践

7.1 缓存一致性

  • 对于可能被多个实例修改的数据,考虑使用分布式缓存
  • 使用适当的缓存失效策略确保数据一致性

7.2 性能优化

  • 根据访问模式调整缓存大小和过期策略
  • 监控缓存命中率,优化缓存配置
  • 对于高并发场景,考虑使用异步加载

7.3 错误处理

  • 实现适当的异常处理机制
  • 考虑缓存失败时的降级策略

8. 故障排除

8.1 常见问题

  1. 缓存未生效

    • 确认 @EnableCaching 已启用
    • 检查缓存名称是否配置正确
    • 验证方法参数是否正确
  2. 内存泄漏

    • 确保缓存大小有合理上限
    • 监控缓存统计信息
    • 检查缓存过期策略
  3. 性能问题

    • 分析缓存命中率
    • 调整缓存大小和过期时间
    • 考虑异步加载策略

8.2 调试技巧

启用缓存统计以监控性能:

@Component
public class CacheMonitor {
    
    @EventListener
    public void onCacheEvent(CacheEvent event) {
        // 监控缓存事件
        System.out.println("Cache event: " + event.getType());
    }
}

总结

通过遵循本指南,您可以成功在 Spring Boot 3.x 应用中集成 Caffeine 缓存框架,提高应用的性能和响应速度。关键在于合理配置缓存策略,监控缓存性能,并根据实际使用情况进行优化。

如需更多详细信息,请参考:

到此这篇关于SpringBoot3.x集成 Caffeine 缓存框架官方指南的文章就介绍到这了,更多相关SpringBoot3.x集成Caffeine 缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java这个名字的来历与优势

    Java这个名字的来历与优势

    Java是Sun公司开发的一种编程语言,Sun公司最初的方向是让Java来开发一些电器装置程序,Java名字的由来,实际上是一个有趣的故事。
    2014-10-10
  • SpringBoot整合Druid实现数据库连接池和监控

    SpringBoot整合Druid实现数据库连接池和监控

    Druid是Java语言中使用的比较多的数据库连接池。Druid还提供了强大的监控和扩展功能。面将介绍SpringBoot整合Druid实现数据库连接池和监控功能,感兴趣的可以了解一下
    2021-08-08
  • Java并发编程之Java内存模型

    Java并发编程之Java内存模型

    这篇文章主要为大家介绍了Java内存模型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助,希望能够给你带来帮助
    2021-11-11
  • RocketMQ线程池创建实现原理详解

    RocketMQ线程池创建实现原理详解

    这篇文章主要为大家介绍了RocketMQ线程池创建实现原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Java如何读取csv文件并将数据放入对象中

    Java如何读取csv文件并将数据放入对象中

    这篇文章主要介绍了Java如何读取csv文件并将数据放入对象中的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Spring Boot 整合单机websocket的步骤 附github源码

    Spring Boot 整合单机websocket的步骤 附github源码

    websocket 是一个通信协议,通过单个 TCP 连接提供全双工通信,这篇文章主要介绍了Spring Boot 整合单机websocket的步骤(附github源码),需要的朋友可以参考下
    2021-10-10
  • 使用Java实现PDF文件安全检测功能

    使用Java实现PDF文件安全检测功能

    在日常开发中,我们经常需要处理用户上传的PDF文件,然而,PDF文件可能包含恶意脚本或危险内容,这些内容可能对系统安全构成威胁,本文将介绍如何使用Java实现一个PDF安全检测工具类来防止恶意内容注入,需要的朋友可以参考下
    2025-08-08
  • Java之进程和线程的区别

    Java之进程和线程的区别

    这篇文章主要介绍了进程与线程的区别,线程具有许多传统进程所具有的特征,而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务,有感兴趣的小伙伴可以参考阅读本文
    2023-03-03
  • java虚拟机学习笔记基础篇

    java虚拟机学习笔记基础篇

    在本篇文章里小编给大家整理的是关于java虚拟机学习笔记的相关内容,分享了一些基础知识点,需要的朋友们参考下。
    2019-06-06
  • Mybatis-Plus使用saveOrUpdate及问题解决方法

    Mybatis-Plus使用saveOrUpdate及问题解决方法

    本文主要介绍了Mybatis-Plus使用saveOrUpdate及问题解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01

最新评论