Spring Boot 3.X 下Redis缓存的尝试(二):自动注解实现自动化缓存操作
前言
上文我们做了在Spring Boot下对Redis的基本操作,如果频繁对Redis进行操作而写对应的方法显示使用注释更会更高效;
比如:
依之前操作对一个业务进行定入缓存需要把数据拉取到后再定入;
而今天我们可以通过注释的方式不需要额外代码去实现对Redis的操作。
推荐在读本文之前先看一下上一篇《》
一、加入依赖
Swagger 3.0
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.3.0</version>
</dependency>
spring-boot-starter-cache 缓存
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
二、开启缓存
@SpringBootApplication
@EnableCaching
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
三、Swagger配置
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 {@Beanpublic GroupedOpenApi publicApi() {String[] paths = {"/**"};String[] packages = {"com.example.demo.controller"};//扫描的路径return GroupedOpenApi.builder().group("public").pathsToMatch(paths).packagesToScan(packages).build();}@Beanpublic OpenAPI openAPI() {return new OpenAPI().info(new Info().title("接口文档标题").description("SpringBoot3 集成 Swagger3接口文档").version("v1")).externalDocs(new ExternalDocumentation().description("项目API文档").url("/"));}
}
四、实体类
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;
}
五、服务类 注解实现
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){}
}
六、控制层测试
@RestController
@Tag(name = "TestController",description = "测试接口")
@RequestMapping(value = "/swaggertest")
public class StuController {@Autowiredprivate 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进行序列化》