苍穹外卖之SpringCache在项目中的应用场景 📅 发布时间:2026/7/7 3:31:10 👁️ 浏览次数: 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:SetmealController1.导入和Redis和SpringCache的Maven依赖坐标1.1sky-take-out: pom.xml?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentartifactIdspring-boot-starter-parent/artifactIdgroupIdorg.springframework.boot/groupIdversion2.7.3/version/parentgroupIdcom.sky/groupIdartifactIdsky-take-out/artifactIdpackagingpom/packagingversion1.0-SNAPSHOT/versionmodulesmodulesky-common/modulemodulesky-pojo/modulemodulesky-server/module/modulespropertiesdruid1.2.1/druid/propertiesdependencyManagementdependenciesdependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion${druid}/version/dependency/dependencies/dependencyManagement/project1.2sky-server: pom.xml?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdsky-take-out/artifactIdgroupIdcom.sky/groupIdversion1.0-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdsky-server/artifactIddependenciesdependencygroupIdcom.sky/groupIdartifactIdsky-common/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdcom.sky/groupIdartifactIdsky-pojo/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdscopecompile/scope/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project2.在项目启动类SkyApplication上开启缓存注解功能SpringBootApplicationEnableTransactionManagement// 开启注解方式的事务管理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(cacheNamessetmeal,key#categoryId)// key名称setmeal::{categoryId}publicResultListSetmealgetByCategoryId(LongcategoryId){ListSetmealsetmealssetmealService.getByCategoryId(categoryId);returnResult.success(setmeals);}}4.编写admin/SetmealController使用CacheEvict清除缓存/** * 套餐管理模块 */RestController(adminSetmealController)RequestMapping(/admin/setmeal)publicclassSetmealController{AutowiredprivateSetmealServicesetmealService;// 新增套餐和对应的菜品PostMappingCacheEvict(cacheNamessetmeal,key#setmealDTO.categoryId)// 清理缓存publicResultsaveWithDish(RequestBodySetmealDTOsetmealDTO){setmealService.saveWithDish(setmealDTO);returnResult.success();}// 批量删除套餐DeleteMappingCacheEvict(cacheNamessetmeal,allEntriestrue)// 清理全部缓存publicResultdeleteBatch(RequestParamListLongids){setmealService.deleteBatch(ids);returnResult.success();}// 修改套餐PutMappingCacheEvict(cacheNamessetmeal,allEntriestrue)// 清理全部缓存publicResultupdate(RequestBodySetmealDTOsetmealDTO){setmealService.updateWithDishes(setmealDTO);returnResult.success();}// 起售停售套餐PostMapping(/status/{status})CacheEvict(cacheNamessetmeal,allEntriestrue)// 清理全部缓存publicResultchangeStatus(PathVariableIntegerstatus,Longid){setmealService.changeStatus(status,id);returnResult.success();}}
不想写大量 if 判断?试试用规则执行器优化,就很丝滑! 前言:只有体验过几百行 if else 折磨的人,才会对本篇产生共鸣! 1业务场景 近日在公司领到一个小需求,需要对之前已有的试用用户申请规则进行拓展。我们的场景大概如下所示: if (是否海外用户) {return false; }if (刷单用户) {r… 2026/7/7 3:31:00
鸿蒙中级课程笔记7—给应用添加通知 注意本章实现的为本地通知 通知介绍 通知分类 根据内容样式划分 分类维度具体类型说明与用途🎨 按内容样式分类基础类型用于展示静态的文本或图片信息。模板类型用于展示动态变化的内容,最常见的是进度条。 基础通知分类 这是最常用的通知类型&… 2026/5/17 1:30:50
2026年,学R语言,为什么399元的专栏真的很值,你只需要这一份资料,其它图文资料不再需要买了! 当前医药数据科学和R语言领域,网络上和书籍市面上一大堆资料,表面看起来琳琅满目,价格从几十元的书籍到动辄几千元一次的线下培训班都有。但绝大多数培训或书籍都受限于时间和篇幅,浅尝辄止,很多仅仅是基础入门&#x… 2026/7/3 20:14:12
天辛大师漫谈AI时代的如梦令,人类梦想的理解如实记录 天心大师漫谈AI时代的如梦令:梦想的理解也须如实记录跨越时空的哲思,国学视角解构技术迷局的智者,总能在代码与诗行间找到奇妙的共鸣点。当被问及如何用传统词牌《如梦令》观照AI时代,沉吟片刻,缓缓道来:“… 2026/7/7 3:26:31
幼小衔接拼音APP怎么选?适趣拼音为什么适合系统学习拼音? 幼小衔接拼音APP怎么选?适趣拼音为什么适合系统学习拼音? 很多家长到了幼小衔接阶段,都会突然意识到一个问题:拼音不能等到一年级再完全从零开始。 不是说孩子一定要提前学完所有内容,而是如果孩子对拼音完全陌生&… 2026/7/7 3:26:31
Maya动画渲染太慢?一篇文章教你用云渲染,大幅缩短出图时间(附渲染101使用教程) 对于很多做Maya动画的朋友来说,真正耗时间的往往不是建模、绑定或者动画,而是最后的渲染。尤其是使用 Arnold 渲染时,一个镜头可能几百帧,甚至几千帧。如果每一帧需要2~5分钟,那么一个几十秒的动画,往往就需… 2026/7/7 3:26:31
“打卡式”上了一堆系统 + 不断贴身定制开发,别提AI Ready了,反欠了一身技术债 For:CIO、CTO、数字化负责人、先进制造企业CEO 从一家先进制造企业的SAP BTP实践,看复杂制造企业如何走出“接口堆系统”的技术债 核心观点|复杂制造企业的AI Ready,往往不是从模型开始,而是从“干净核心、可控扩展、现… 2026/7/7 3:22:31
OpenClaw无捆绑安装包,安全纯净版AI助手部署 大家好啊,我是你们的老朋友。最近后台收到不少私信,问有没有那种“干干净净、不夹带私货”的AI助手部署工具。说实话,我自己也踩过很多坑——下载一个所谓的“一键安装包”,结果桌面多了个浏览器主页,开机自启多了三个… 2026/7/7 3:20:30
pymoo多目标优化框架架构深度解析与高级应用实践 pymoo多目标优化框架架构深度解析与高级应用实践 【免费下载链接】pymoo NSGA2, NSGA3, R-NSGA3, MOEAD, Genetic Algorithms (GA), Differential Evolution (DE), CMAES, PSO 项目地址: https://gitcode.com/gh_mirrors/py/pymoo 在复杂工程系统设计与决策支持领域&… 2026/7/7 3:18:30
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践 1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8… 2026/7/7 0:01:11
如何3步搞定加密视频下载:跨平台资源嗅探与解密工具终极指南 如何3步搞定加密视频下载:跨平台资源嗅探与解密工具终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是… 2026/7/7 0:03:13
Jailhouse-gui可视化管理工具:让多核处理器分区变得简单高效 Jailhouse-gui可视化管理工具:让多核处理器分区变得简单高效 【免费下载链接】Jailhouse-gui A graphical user interface (GUI) tool for configuring and managing Jailhouse, a Linux-based hypervisor for partitioning multicore processors into isolated cel… 2026/7/7 0:03:13
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/6 8:43:22
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/6 7:29:49
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/6 7:29:51