Spring Boot 中缓存的用法

缓存(Caching)是提升应用性能的重要手段之一,通过减少不必要的数据计算和数据库访问,显著提高系统的响应速度。在 Spring Boot 中,缓存机制被集成得非常好,使得我们能够快速、方便地使用缓存功能。本文将介绍 Spring Boot 中一些缓存的用法,帮助你更好地利用缓存并应用于实际开发中。

基础配置

在 Spring Boot 项目中启用缓存非常简单,只需要在主应用类上添加@EnableCaching注解。

@SpringBootApplication
@EnableCaching // 启用缓存
public class CachingApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(CachingApplication.class, args);
    }
}

使用@Cacheable注解

@Cacheable注解用于标注将结果进行缓存的方法。假设我们有一个方法需要根据 ISBN 号查询图书信息:

@Service
public class BookService {
    
    // 模拟数据库查找图书
    @Cacheable(cacheNames = "books", key = "#isbn")
    public Book findBookByISBN(String isbn) {
        System.out.println("查询数据库获取数据...");
        return new Book(isbn, "Some Book");
    }
}

在这个例子中,findBookByISBN方法被@Cacheable注解标注,意思是当该方法被调用时,先检查缓存中是否存在键为isbn的缓存数据。如果不存在,执行方法体并将返回值放入缓存中。

条件缓存

有时候,我们希望根据条件决定是否缓存结果。例如,只有当 ISBN 号长度大于10时才进行缓存:

@Cacheable(cacheNames = "books", key = "#isbn", condition = "#isbn.length() > 10")
public Book findBookByISBN(String isbn) {
    System.out.println("查询数据库获取数据...");
    return new Book(isbn, "Some Book");
}

上面的代码表示,只有当 ISBN 长度大于10时,才会缓存该方法的返回结果。

更新和移除缓存

当数据发生变化时,缓存中的数据也需要同步更新或移除。我们可以使用@CachePut@CacheEvict注解来实现这一点。

@Service
public class BookService {
    
    @Cacheable(cacheNames = "books", key = "#isbn")
    public Book findBookByISBN(String isbn) {
        System.out.println("查询数据库获取数据...");
        return new Book(isbn, "Some Book");
    }

    // 更新缓存
    @CachePut(cacheNames = "books", key = "#book.isbn")
    public Book updateBook(Book book) {
        System.out.println("更新数据库数据...");
        return book;
    }

    // 移除缓存
    @CacheEvict(cacheNames = "books", key = "#isbn")
    public void removeBookFromCache(String isbn) {
        System.out.println("移除缓存数据...");
        // 实际上不做任何其他操作,我们只是演示缓存移除操作
    }
}

这里,@CachePut注解表示每次调用updateBook方法时,返回结果会被同步到缓存中。而@CacheEvict注解表示每次调用removeBookFromCache方法时,缓存中对应的记录会被移除。

自定义缓存配置

默认情况下,Spring Boot 使用ConcurrentMapCacheManager作为缓存管理器。我们可以自定义缓存配置,来控制缓存的存储方式、过期时间等。

@Configuration
public class CacheConfig {
    
    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(Arrays.asList(
            new ConcurrentMapCache("books")
            // 在这里可以添加更多的缓存配置
        ));
        return cacheManager;
    }
}

通过这样的配置,我们可以集中管理缓存的各种属性,从而使得缓存配置变得更加灵活和可控。

结语

缓存是一把双刃剑,合理使用可以大大提高系统性能,但不当使用则可能导致数据不一致等问题。开发者应根据具体需求和场景,灵活使用缓存策略。

个人观点,仅供参考。


在这里插入图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源梦倩影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值