当前位置: 首页 > news >正文

苍穹外卖之SpringCache在项目中的应用场景

SpringCache

参考视频或文章

  • https://juejin.cn/post/7507548342508371983

一、技术介绍

1.概述

  • SpringCache是Spring框架提供的一套声明式缓存抽象层(只提供接口,不提供实现),通过在方法上添加注解简化缓存操作,无需手动编写缓存逻辑。
  • SpringCache支持多种缓存实现,如Caffeine、Redis、EhCache等等,并统一了缓存访问的API。

2.核心特点

  • 基于注解的声明式缓存
  • 支持SpEL(Spring Expression Language)表达式
  • 自动与Spring生态集成
  • 支持条件缓存

3.常用缓存注解

缓存注解功能
@EnableCaching开启注解方式的缓存功能,通常加在项目启动类上。
@Cacheable标记方法,将方法的返回值缓存,下次调用直接从缓存中读取,无需重新执行方法。
@CachePut标记方法,将方法的返回值缓存。
@CacheEvict标记方法,用于清除缓存,通常配合数据删除操作使用。
@Caching组合多个缓存注解,支持在同一个方法上同时配置多种缓存行为。
@CacheConfig标记类,为类中所有方法指定统一的缓存配置,减少重复配置。

二、项目应用

涉及到的文件如下:

sky-take-out:pom.xmlsky-server:pom.xmlsrc/main/java/com.sky:SkyApplicationcontroller:admin:SetmealControlleruser:SetmealController

1.导入和Redis和SpringCache的Maven依赖坐标

1.1sky-take-out: pom.xml
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.3</version></parent><groupId>com.sky</groupId><artifactId>sky-take-out</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>sky-common</module><module>sky-pojo</module><module>sky-server</module></modules><properties><druid>1.2.1</druid></properties><dependencyManagement><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid}</version></dependency></dependencies></dependencyManagement></project>
1.2sky-server: pom.xml
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>sky-take-out</artifactId><groupId>com.sky</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>sky-server</artifactId><dependencies><dependency><groupId>com.sky</groupId><artifactId>sky-common</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.sky</groupId><artifactId>sky-pojo</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>compile</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2.在项目启动类SkyApplication上开启缓存注解功能

@SpringBootApplication@EnableTransactionManagement// 开启注解方式的事务管理@EnableCaching// 开启注解方式的缓存功能publicclassSkyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SkyApplication.class,args);}}

3.编写user/SetmealController,使用@Cachable更新缓存

/** * 用户端-套餐接口 */@RestController("userSetmealController")@RequestMapping("/user/setmeal")publicclassSetmealController{@AutowiredprivateSetmealServicesetmealService;@AutowiredprivateDishServicedishService;// 根据分类id查询已启用的套餐@GetMapping("/list")@Cacheable(cacheNames="setmeal",key="#categoryId")// key名称:setmeal::{categoryId}publicResult<List<Setmeal>>getByCategoryId(LongcategoryId){List<Setmeal>setmeals=setmealService.getByCategoryId(categoryId);returnResult.success(setmeals);}}

4.编写admin/SetmealController,使用@CacheEvict清除缓存

/** * 套餐管理模块 */@RestController("adminSetmealController")@RequestMapping("/admin/setmeal")publicclassSetmealController{@AutowiredprivateSetmealServicesetmealService;// 新增套餐和对应的菜品@PostMapping@CacheEvict(cacheNames="setmeal",key="#setmealDTO.categoryId")// 清理缓存publicResultsaveWithDish(@RequestBodySetmealDTOsetmealDTO){setmealService.saveWithDish(setmealDTO);returnResult.success();}// 批量删除套餐@DeleteMapping@CacheEvict(cacheNames="setmeal",allEntries=true)// 清理全部缓存publicResultdeleteBatch(@RequestParamList<Long>ids){setmealService.deleteBatch(ids);returnResult.success();}// 修改套餐@PutMapping@CacheEvict(cacheNames="setmeal",allEntries=true)// 清理全部缓存publicResultupdate(@RequestBodySetmealDTOsetmealDTO){setmealService.updateWithDishes(setmealDTO);returnResult.success();}// 起售停售套餐@PostMapping("/status/{status}")@CacheEvict(cacheNames="setmeal",allEntries=true)// 清理全部缓存publicResultchangeStatus(@PathVariableIntegerstatus,Longid){setmealService.changeStatus(status,id);returnResult.success();}}
http://www.jsqmd.com/news/327032/

相关文章:

  • 重组 IgG 抗体:基因工程赋能的定制化抗体,精准适配生物研发与药物开发
  • 在移民体检方面,有哪些能提供专业靠谱、高端且有领馆认证服务的推荐
  • 英国移民体检心得:为什么我推荐百汇新天地医疗?
  • 阿里不推荐使用 keySet() 遍历HashMap?是有原因的
  • SpringBoot 这么实现动态数据源切换,就很丝滑!
  • 2026fall英国留学办理签证的流程,去英国留学签证在哪里办
  • 苍穹外卖之SpringMVC的消息转换器在项目中的应用场景
  • 不想写大量 if 判断?试试用规则执行器优化,就很丝滑!
  • Redis快速实现布隆过滤器
  • 完整教程:蓝牙智能硬件常见报错处理(连接失败、数据丢包、设备搜索不到)
  • Godot开发问题记录:无法为节点拖拽添加脚本(godot显示禁止图标)
  • 深度硬核|.xr勒索病毒逆向分析与数据救援实战指南(附IOCs排查脚本)
  • 金融风控系统中的实时数据库技术实践
  • 广州PHP开发服务选择指南:如何寻找靠谱的技术合作伙伴
  • 巴菲特的创新能力评估:分布式创新网络的价值创造
  • 鸿蒙中级课程笔记7—给应用添加通知
  • 2026-01-31 ChpoBERT:面向中文政策文本的预训练模型
  • 从零到一:一个广州兼职PHP项目的敏捷交付与长期维护实践
  • 凌晨两点调 API 调到崩溃,直到 MCP 出现——AI 终于有了统一接口
  • 复现模拟退火、粒子群算法解约束最优化问题 内容: 程序一:模拟退火算法SA算法求解附图所示变速...
  • 3.MySQL 数据库集成 - 实践
  • 2026年广州PHP兼职全攻略:常见问题与狗蛋斯工作室实践
  • MCP 协议:让 AI 像插 USB 一样连接万物,我们在 Sealos 上跑通了
  • AI辅助API设计:提高接口的一致性与可用性
  • 1月31号
  • 实用指南:python+django/flask的结合人脸识别和实名认证的校园论坛系统
  • C++可变模板参数详细讲解
  • Java 基础全攻略:从语法到实战项目(简单总结)
  • 2024提示工程架构师技术路线图:最佳实践版(大厂都在用)!
  • Vue Day3