Spring Boot 3.X 下Redis缓存的尝试(二):自动注解实现自动化缓存操作

前言

上文我们做了在Spring Boot下对Redis的基本操作,如果频繁对Redis进行操作而写对应的方法显示使用注释更会更高效;

比如:

依之前操作对一个业务进行定入缓存需要把数据拉取到后再定入;

而今天我们可以通过注释的方式不需要额外代码去实现对Redis的操作。

推荐在读本文之前先看一下上一篇《》

一、加入依赖

Swagger 3.0

html 复制代码
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.3.0</version>
</dependency>
复制代码
spring-boot-starter-cache  缓存
html 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

二、开启缓存

java 复制代码
@SpringBootApplication
@EnableCaching
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

三、Swagger配置

java 复制代码
import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {
    @Bean
    public GroupedOpenApi publicApi() {
        String[] paths = {"/**"};
        String[] packages = {"com.example.demo.controller"};//扫描的路径
        return GroupedOpenApi.builder()
                .group("public")
                .pathsToMatch(paths)
                .packagesToScan(packages)
                .build();
    }
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("接口文档标题")
                        .description("SpringBoot3 集成 Swagger3接口文档")
                        .version("v1"))
                .externalDocs(new ExternalDocumentation()
                        .description("项目API文档")
                        .url("/"));
    }
}

四、实体类

java 复制代码
import lombok.Data;

import java.io.Serializable;

@Data
public class Stu implements  Serializable{
    //private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private Integer age;
}

五、服务类 注解实现

java 复制代码
import com.example.demo.mode.Stu;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class RedisService {
    //----通过注释实现Redis的写入
    @Cacheable (cacheNames = "abc",unless =  "#result==null",key =  "#id")
     public Stu getStuById(Integer id) {
        Stu stu = new Stu();
         stu.setId(id);
         stu.setName("张三");
         stu.setAge(18);
        return stu;
    }

    //---- 通过注释实现Redis的更新
     @CachePut (cacheNames = "abc",key =  "#result.id")
      public Stu update(Stu stu) {
        stu.setName("李四");
        stu.setAge(19);
        return stu;
    }
     //---- 通过注释实现Redis的删除
    @CacheEvict (cacheNames = "abc",key =  "#id")
    public void delete(Integer id){
    }
}

六、控制层测试

java 复制代码
@RestController
@Tag(name = "TestController",description = "测试接口")
@RequestMapping(value = "/swaggertest")
public class StuController {

    @Autowired
    private RedisService redisService;
     @GetMapping("/getStuById")
      public Stu getStuById(Integer id){
          return redisService.getStuById(id);
     }
     @GetMapping("/update")
      public Stu update(Stu stu){
          return redisService.update(stu);
     }
     @DeleteMapping ("/delete")
       public void delete(Integer id){
          redisService.delete(id);
     }
}

七、效果展示

下篇:《Spring Boot 3.X 下Redis缓存的尝试(三):精进-用Jason进行序列化》

相关推荐
流烟默18 小时前
SSE 实战:在 SpringBoot + Vue 项目中零依赖实现轻量级实时消息推送
vue.js·spring boot·后端·sse
ly768918 小时前
Spring Boot 集成 PostgreSQL 的连接池调优:HikariCP、prepared statement 与服务器资源边界
spring boot·postgresql·hikaricp·连接池调优
wangjialelele19 小时前
一文梳理 Spring Cloud 核心组件:Eureka、Nacos、OpenFeign、LoadBalancer 与 Gateway
java·spring boot·spring·spring cloud·微服务·nacos
imDwAaY19 小时前
操作系统如何管理程序运行?从线程、进程到内存隔离与用户态切换:CS162 Note2
android·java·redis
七夜zippoe20 小时前
Spring Boot 接通义千问:从拿 Key 到第一个对话接口跑通(保姆级)
java·spring boot·后端
Nebula_g20 小时前
SpringBoot企业级实战项目—云禾外卖—SpringBoot常用注解解析
java·网络·数据库·spring boot·后端·spring·javase
企业数字化笔记20 小时前
租户停用后数据和任务怎么处理?冻结、恢复与保留策略的实现
android·java·spring boot
码途行者21 小时前
处理超时未支付订单:两套轻量化方案,附 PHP 极简实现
开发语言·redis·php
vx_Biye_Design21 小时前
PHP中医养生馆预约系统60841-计算机课程设计、毕业设计
vue.js·spring boot·后端·mysql·php·课程设计·express
程序员小孔.21 小时前
基于 SpringBoot + UniApp + Vue 的家政服务系统设计与实现
前端·数据库·spring boot·python·docker·微信小程序