问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Spring Boot项目整合Caffeine实现本地缓存

创作时间:
作者:
@小白创作中心

Spring Boot项目整合Caffeine实现本地缓存

引用
CSDN
1.
https://blog.csdn.net/TM007_/article/details/140403890

缓存是提升系统性能的一个不可或缺的工具,通过缓存可以避免大部分重复的请求到数据库层,减少IO链接次数,提升整体的响应速率。本文将结合具体的Spring Boot项目,介绍如何使用Caffeine实现本地缓存。

一、Caffeine简介

Caffeine是一个现代化的Java缓存库,设计用于提供高性能和可伸缩性的本地缓存解决方案。适用于高并发以及快速访问数据的场景,因为内部实现了基于ConcurrentHashMap的数据结构,从而保证并发访问时的线程安全和高性能。

在Spring Framework中,通常通过Spring Cache抽象来使用Caffeine缓存,常用的注解包括:

  • @Cacheable:用于标记方法可以使用缓存。当方法被调用时,Spring会首先检查缓存中是否存在对应的数据,如果存在则直接返回缓存中的数据,否则执行方法并将返回值存入缓存。

  • @CachePut:用于更新缓存中的数据。与@Cacheable不同的是,@CachePut注解的方法始终会执行,并将执行结果存入指定的缓存中,适用于更新操作后需要同步更新缓存的场景。

  • @CacheEvict:用于从缓存中移除一个或多个条目。可以通过指定的key或条件来移除缓存中的数据,常用于执行删除操作后清除相应的缓存条目,以保证数据一致性。

二、项目实践

2.1 环境准备

后续测试是基于一个可运行的Spring Boot项目,通过ApiPost模拟请求测试缓存接口。

2.2 项目搭建

2.2.1 依赖引入+配置

在项目的pom.xml文件中添加以下依赖,然后点击Maven刷新,Maven会从配置的远程仓库中自动下载并导入依赖包

<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>2.5.5</version>
</dependency>

在.properties配置文件中加入以下配置,设置了缓存的类型以及自定义的缓存参数,比如过期时间

spring.cache.type=caffeine
spring.cache.caffeine.spec=initialCapacity=10,maximumSize=200,expireAfterWrite=30s

另外不要忘了在启动类上加开启缓存的注解

2.2.2 测试接口

因为Caffeine常用的注解有三个,所以这里三个测试接口分别测试每种注解的使用

第一个测试接口对应的是@Cacheable注解的使用,value指明缓存的名称为data,key利用Spring EL表达式与请求参数中的"s"关联,方法作用就是打印当前时间

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;

@RestController
@RequestMapping("/cache")
public class CachController {
    @Cacheable(value = "data",key = "#s")
    @GetMapping("/get")
    public String getData(String s){
        LocalDateTime now = LocalDateTime.now();
        String time = now.toString();
        System.out.println("查询到数据:"+ time);
        return " 查询到数据 :" + time;
    }
    @CachePut(value = "data",key = "#s")
    @GetMapping("/put")
    public String putData(String s){
        LocalDateTime now = LocalDateTime.now();
        String time = now.toString();
        System.out.println("存储数据:"+ time);
        return " 存储数据 :" + time;
    }
    @CacheEvict(value = "data",key = "#s")
    @PostMapping("/rem")
    public String remData(String s){
        LocalDateTime now = LocalDateTime.now();
        String time = now.toString();
        System.out.println("清除数据 :"+time);
        return " 清除数据 :" + time;
    }
}

2.3 接口测试

2.3.1 测试@Cacheable注解

通过模拟请求,可以看到成功创建缓存,并且在三十秒内重复请求的话,直接返回缓存中的数据并不会重新执行方法体,从控制台只打印了一条日志也可以体现

2.3.2 测试@CachePut注解

@CachePut注解的特性就是每次都进到方法体,然后执行结束后会进行缓存刷新,这一点可以从测试@Cacheable注解体现,执行完一次cacheput操作后,之前的接口返回的缓存也是CachePut接口产生的数据

2.3.3 测试@CacheEvict注解

@CacheEvict注解的主要作用是清除指定的缓存,通常用于删除数据的业务逻辑之后,一并清除缓存;这里可以通过控制台信息体现,先使用Cacheput操作产生缓存,然后调用CacheEvict清除缓存,再通过Cacheable操作查询缓存,结果显示并未查询到CachePut中产生的缓存数据

三、总结

本文介绍了如何在Spring Boot项目中整合Caffeine实现本地缓存,包括Caffeine的基本介绍、项目实践(环境准备、项目搭建、接口测试)以及三个常用的缓存注解(@Cacheable、@CachePut、@CacheEvict)的使用方法。通过本文的介绍,读者可以快速掌握在Spring Boot项目中使用Caffeine缓存的基本方法。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号