SpringBoot集成Caffeine缓存:高性能本地缓存解决方案

SpringBoot集成Caffeine缓存:高性能本地缓存解决方案

一.Caffeine是什么?

Caffeine是一个高性能的Java缓存库,为Java应用程序提供了极快的本地内存缓存解决方案。它是基于Google Guava Cache重新设计的缓存框架,在性能和功能上都有显著提升。Caffeine的核心优势在于其高效的缓存算法和优秀的并发性能,能够显著提升应用程序的响应速度和吞吐量。

二.为什么选择Caffeine?

Caffeine vs Redis

  1. 本地缓存 vs 分布式缓存
    • Caffeine:本地内存缓存,适用于单机应用
    • Redis:分布式缓存,适用于多实例、需要共享缓存的场景
  2. 性能对比
    • Caffeine:读写速度极快,几乎没有网络开销
    • Redis:有网络通信开销,但支持更复杂的缓存策略
  3. 适用场景
    • 选择Caffeine的情况:
      • 单体应用
      • 数据量相对较小
      • 缓存数据不需要在多个服务间共享
      • 对性能要求极高
      • 缓存数据变化不频繁
    • 选择Redis的情况:
      • 分布式系统
      • 需要缓存共享
      • 缓存数据量大
      • 需要复杂的缓存策略
      • 要求数据持久化
      • 需要分布式锁等高级特性

一.引入依赖

xml-dtd 复制代码
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.0.5</version>
</dependency>

二.编写配置类

java 复制代码
@EnableCaching
@Configuration
public class CacheConfig extends CachingConfigurerSupport {

    @Bean("caffeineCacheManager")
    @Primary
    public CacheManager caffeineCacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        // 配置缓存策略
        cacheManager.setCaffeine(Caffeine.newBuilder()
                .expireAfterWrite(5, TimeUnit.MINUTES)  // 5分钟后过期
                .initialCapacity(100)                   // 初始容量
                .maximumSize(200));                     // 最大缓存条目
        return cacheManager;
    }
}

三.使用案例

java 复制代码
@Component
public class ItemCache {
    @Autowired
    private ItemConfigDao itemConfigDao;

    /**
     * 根据类型获取物品列表
     * @param itemType 物品类型id
     * @return
     */
    @Cacheable(cacheNames = "item",key = "'itemsByType:'+#itemType")
    public List<ItemConfig> getByType(Integer itemType) {
       return itemConfigDao.getByType(itemType);
    }


    /**
     * 删除缓存
     * @param itemType 物品类型id
     */
    @CacheEvict(cacheNames = "item",key = "'itemsByType:'+#itemType")
    public void evictByType(Integer itemType) {
    }
}
相关推荐
程序员爱钓鱼30 分钟前
Rust 项目目录结构详解:从 Hello World 到企业级项目
后端·rust
岁月宁静33 分钟前
DeepSeek Harness 团队 招聘 :JD反推:新手如何系统掌握AI Agent开发技术?
前端·人工智能·后端
ACGkaka_1 小时前
Spring Boot 实战(四十二):集成 Spring AI 六大场景
人工智能·spring boot·spring
枫叶丹41 小时前
Loop Engineering:从提示词到循环系统
数据库·redis·缓存·loop
编程(变成)小辣鸡2 小时前
如何防止接口被恶意刷?
java·后端·网络安全
葫芦和十三9 小时前
图解 MongoDB 30|查询路由与广播查询:带片键定向,不带就广播
后端·mongodb·agent
葫芦和十三10 小时前
图解 MongoDB 29|分片键陷阱:jumbo chunk、孤儿文档和写入热点
后端·mongodb·agent
进击的程序猿~10 小时前
Go Zero源码阅读1
后端·golang
2601_9615934211 小时前
Rust 开发环境配置繁琐?RustRover 开箱即用搞定编码调试
开发语言·后端·macos·rust
犀利豆13 小时前
AI in Harness(三)
人工智能·后端