蓝色脚手架织梦企业网站模板东莞网站建设 塑胶五金

web/2025/9/26 18:58:16/文章来源:
蓝色脚手架织梦企业网站模板,东莞网站建设 塑胶五金,排版设计技巧,wordpress 所有标签页1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得#xff0c;如果用户端访问量比较大#xff0c;数据库访问压力随之增大。 结果#xff1a; 系统响应慢、用户体验差 1.2 实现思路 通过Redis来缓存菜品数据#xff0c;减少数据库查询操作。 缓…1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得如果用户端访问量比较大数据库访问压力随之增大。 结果 系统响应慢、用户体验差 1.2 实现思路 通过Redis来缓存菜品数据减少数据库查询操作。 缓存逻辑分析 每个分类下的菜品保存一份缓存数据数据库中菜品数据有变更时清理缓存数据 1.3 代码开发 修改用户端接口 DishController 的 list 方法加入缓存处理逻辑 为了保证数据库和Redis中的数据保持一致修改管理端接口 DishController 的相关方法加入清理缓存逻辑。 需要改造的方法 新增菜品修改菜品批量删除菜品起售、停售菜品 2. 缓存套餐 2.1 Spring Cache 2.1.1 介绍 Spring Cache 是一个框架实现了基于注解的缓存功能只需要简单地加一个注解就能实现缓存功能。 Spring Cache 提供了一层抽象底层可以切换不同的缓存实现例如 EHCacheCaffeineRedis(常用) 起步依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId version2.7.3/version /dependency2.1.2 常用注解 在 SpringCache 中提供了很多缓存操作的注解常见的是以下的几个 注解说明EnableCaching开启缓存注解功能通常加在启动类上Cacheable在方法执行前先查询缓存中是否有数据如果有数据则直接返回缓存数据如果没有缓存数据调用方法并将方法返回值放到缓存中CachePut将方法的返回值放到缓存中CacheEvict将一条或多条数据从缓存中删除 在spring boot项目中使用缓存技术只需在项目中导入相关缓存技术的依赖包并在启动类上使用EnableCaching开启缓存支持即可。 例如使用Redis作为缓存技术只需要导入Spring data Redis的maven坐标即可。 2.1.3 入门案例 1). 环境准备 导入基础工程: 底层已使用 Redis 缓存实现 基础环境的代码在我们今天的资料中已经准备好了 大家只需要将这个工程导入进来就可以了。导入进来的工程结构如下 数据库准备: 创建名为spring_cache_demo数据库将springcachedemo.sql脚本直接导入数据库中。 引导类上加EnableCaching: package com.itheima;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching;Slf4j SpringBootApplication EnableCaching//开启缓存注解功能 public class CacheDemoApplication {public static void main(String[] args) {SpringApplication.run(CacheDemoApplication.class,args);log.info(项目启动成功...);} }2). CachePut注解 CachePut 说明 ​作用: 将方法返回值放入缓存value: 缓存的名称, 每个缓存名称下面可以有很多keykey: 缓存的key ---------- 支持Spring的表达式语言SPEL语法 在save方法上加注解CachePut 当前 UserController 的 save 方法是用来保存用户信息的我们希望在该用户信息保存到数据库的同时也往缓存中缓存一份数据我们可以在 save 方法上加上注解 CachePut用法如下 /*** CachePut将方法返回值放入缓存* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key*/PostMappingCachePut(value userCache, key #user.id)//key的生成userCache::1 // CachePut(value userCache, key #result.id)//对象导航 // CachePut(value userCache, key #p0.id)//p0第一个参数p1第二个参数 // CachePut(value userCache, key #a0.id)//a0第一个参数a1第二个参数 // CachePut(value userCache, key #root.args[0].id)//root.args[0]第一个参数public User save(RequestBody User user){userMapper.insert(user);return user;}说明 key的写法如下 #user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key ;#result.id : #result代表方法返回值该表达式 代表以返回对象的id属性作为key #p0.id#p0指的是方法中的第一个参数id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;#a0.id#a0指的是方法中的第一个参数id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;#root.args[0].id#root.args[0]指的是方法中的第一个参数id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ; 启动服务,通过swagger接口文档测试访问UserController的save()方法 3). Cacheable注解 Cacheable 说明: ​ 作用: 在方法执行前spring先查看缓存中是否有数据如果有数据则直接返回缓存数据若没有数据调用方法并将方法返回值放到缓存中​​ value: 缓存的名称每个缓存名称下面可以有多个key​​ key: 缓存的key ---------- 支持Spring的表达式语言SPEL语法 在getById上加注解Cacheable /*** Cacheable在方法执行前spring先查看缓存中是否有数据如果有数据则直接返回缓存数据若没有数据 *调用方法并将方法返回值放到缓存中* value缓存的名称每个缓存名称下面可以有多个key* key缓存的key*/GetMappingCacheable(cacheNames userCache,key#id)public User getById(Long id){User user userMapper.getById(id);return user;}重启服务,通过swagger接口文档测试访问UserController的getById()方法 第一次访问会请求我们controller的方法查询数据库。后面再查询相同的id就直接从Redis中查询数据不用再查询数据库了就说明缓存生效了。 4). CacheEvict注解 CacheEvict 说明 ​ 作用: 清理指定缓存​ value: 缓存的名称每个缓存名称下面可以有多个key​ key: 缓存的key ---------- 支持Spring的表达式语言SPEL语法 在 delete 方法上加注解CacheEvict DeleteMappingCacheEvict(cacheNames userCache,key #id)//删除某个key对应的缓存数据public void deleteById(Long id){userMapper.deleteById(id);}DeleteMapping(/delAll)CacheEvict(cacheNames userCache,allEntries true)//删除userCache下所有的缓存数据public void deleteAll(){userMapper.deleteAll();}重启服务,通过swagger接口文档测试访问UserController的deleteAll()方法 2.2 实现思路 实现步骤 导入Spring Cache和Redis相关maven坐标在启动类上加入EnableCaching注解开启缓存注解功能在用户端接口SetmealController的 list 方法上加入Cacheable注解在管理端接口SetmealController的 save、delete、update、startOrStop等方法上加入CacheEvict注解 2.3 代码开发 1). 导入Spring Cache和Redis相关maven坐标(已实现) dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId /dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId /dependency2). 在启动类上加入EnableCaching注解开启缓存注解功能 package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.transaction.annotation.EnableTransactionManagement;SpringBootApplication EnableTransactionManagement //开启注解方式的事务管理 Slf4j EnableCaching public class SkyApplication {public static void main(String[] args) {SpringApplication.run(SkyApplication.class, args);log.info(server started);} }3). 在用户端接口SetmealController的 list 方法上加入Cacheable注解 /*** 条件查询** param categoryId* return*/GetMapping(/list)ApiOperation(根据分类id查询套餐)Cacheable(cacheNames setmealCache,key #categoryId) //key: setmealCache::100public ResultListSetmeal list(Long categoryId) {Setmeal setmeal new Setmeal();setmeal.setCategoryId(categoryId);setmeal.setStatus(StatusConstant.ENABLE);ListSetmeal list setmealService.list(setmeal);return Result.success(list);}4). 在管理端接口SetmealController的 save、delete、update、startOrStop等方法上加入CacheEvict注解 /*** 新增套餐** param setmealDTO* return*/PostMappingApiOperation(新增套餐)CacheEvict(cacheNames setmealCache,key #setmealDTO.categoryId)//key: setmealCache::100public Result save(RequestBody SetmealDTO setmealDTO) {setmealService.saveWithDish(setmealDTO);return Result.success();}/*** 批量删除套餐** param ids* return*/DeleteMappingApiOperation(批量删除套餐)CacheEvict(cacheNames setmealCache,allEntries true)public Result delete(RequestParam ListLong ids) {setmealService.deleteBatch(ids);return Result.success();}/*** 修改套餐** param setmealDTO* return*/PutMappingApiOperation(修改套餐)CacheEvict(cacheNames setmealCache,allEntries true)public Result update(RequestBody SetmealDTO setmealDTO) {setmealService.update(setmealDTO);return Result.success();}/*** 套餐起售停售** param status* param id* return*/PostMapping(/status/{status})ApiOperation(套餐起售停售)CacheEvict(cacheNames setmealCache,allEntries true)public Result startOrStop(PathVariable Integer status, Long id) {setmealService.startOrStop(status, id);return Result.success();}3. 添加购物车 3.1 需求分析和设计 用户的购物车数据也是需要保存在数据库中的购物车对应的数据表为 shopping_cart 表具体表结构如下 字段名数据类型说明备注idbigint主键自增namevarchar(32)商品名称冗余字段imagevarchar(255)商品图片路径冗余字段user_idbigint用户id逻辑外键dish_idbigint菜品id逻辑外键setmeal_idbigint套餐id逻辑外键dish_flavorvarchar(50)菜品口味numberint商品数量amountdecimal(10,2)商品单价冗余字段create_timedatetime创建时间 说明 购物车数据是关联用户的在表结构中我们需要记录每一个用户的购物车数据是哪些菜品列表展示出来的既有套餐又有菜品如果用户选择的是套餐就保存套餐ID(setmeal_id)如果用户选择的是菜品就保存菜品ID(dish_id)对同一个菜品/套餐如果选择多份不需要添加多条记录增加数量number即可 3.2 代码开发 4. 查看购物车 4.1 需求分析和设计 当用户添加完菜品和套餐后可进入到购物车中查看购物中的菜品和套餐。 4.2 代码开发 5. 清空购物车 5.1 需求分析和设计 当点击清空按钮时会把购物车中的数据全部清空。 5.2 代码开发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

要建设一个网站需要准备些什么变白网站制作源码

目录 一 准备安装包 二 安装 scala 三 修改配置文件 1)修改 workers 文件 2)修改 spark-env.sh文件 四 进入 spark 交互式平台 一 准备安装包 可以自行去 spark 官网下载想要的版本 这里准备了 spark3.1.2的网盘资源 链接: https://pan.baidu.com…

制作投票的网站软件培训内容怎么写

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

辽宁省朝阳市做网站做网站先做前台还是后台

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的名城小区物业管理系统,…

网站备案中更名网站和官网有区别吗

1. 获取时间 时间是个重要的编程元素,可用于计算间隔、同步服务器以及控制超时。 计算机中的时间分为以下两种形式: 墙钟时间:以12或24小时为周期不断重复,不同的地区和季节会因时区或夏令时而异。单调时间:从一个时…

南京微信网站建设网站后台管理系统怎么登陆

什么情况下存在默认构造函数 说明 如果一个Java类没有显式包含构造函数的声明,那么隐含着有一个默认构造函数。 示例 定义一个类B,没有显式声明构造函数,所以存在一个默认构造函数: package com.thb;public class B {public …

旅游网站模块报价wordpress月会员邀请码

Uibot (RPA设计软件)Mage AI智能识别(发票识别)———机器人的小项目友友们可以参考小北的课前材料五博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~) 紧接着小北的前两篇博客,友友们我们…

做网站维护需要懂什么工业设计专业介绍

File*其实是一个结构体 文件描述符FD:索引到对应的磁盘文件文件读写位置指针FP_POS,如果同时读写需要注意文件指针的位置I/O缓冲区BUFFER:保存内存指针,默认大小是8kb,用于减小我们对硬盘操作的次数。因为我们对硬盘的…

微信公众号的h5网站开发wordpress 检索文件

本文大约 8000 字,阅读大约需要 12 分钟 第一次翻译,限于英语水平,可能不少地方翻译不准确,请见谅! 最近谷歌开源了一个基于 TensorFlow 的库–TFGAN,方便开发者快速上手 GAN 的训练,其 Github …

女性门户网站织梦模板深圳百度推广电话

设想一下,你在家中准备起身,前往橱柜取东西。一个集成 SIF3D 技术的智能家居系统,已经预测出你 的行动路线(路线通畅,避开桌椅障碍物)。当你接近橱柜时,系统已经理解了你的意图,柜门…

贵阳市网站优化新网站开发

perfetto是知名的Android系统性能分析平台。我们还可以用它去分析Linux系统和Chrome(需要装扩展)。本文我们只介绍如何安装的验证。 部署 我们使用Docker部署perfetto ui系统。 FROM ubuntu:20.04 WORKDIR /perfetto-ui RUN apt-get update -y RUN ap…

深圳网站制作公司讯想在网上做外卖 上什么网站好

在业务场景要求高的数据库中,对于单条删除和更新操作,在 delete 和 update 后面加 limit 1 绝对是个好习惯。比如,在删除执行中,第一条就命中了删除行,如果 SQL 中有 limit 1;这时就 return 了,…

合肥浦发建设集团网站宝塔没有域名直接做网站怎么弄

AlphaFold3 中 MmcifObject类 是 解析 mmCIF 文件的核心数据结构,用于存储解析后的蛋白质结构信息,包含PDB 头部信息、Biopython 解析的结构、链序列信息等。 下面代码包含 Monomer 、AtomSite、ResiduePosition、ResidueAtPosition、 MmcifObject以及ParsingResult数据类的…

网站下载视频方法网站建设全网营销客户资源

通过使用搜索引擎、扫描器、发送简单的HTTP请求或者专门精心制作的请求,都有可能导致应用程序泄漏诸如错误信息、版本信息以及所使用的技术等信息。 一、测试robots.txt文件 现在,我们首先介绍如何测试robots.txt文件。Web蜘蛛/机器人/爬虫可以用来检索网…

网站规划的主要内容wordpress视频教程 电驴

Glibc 中的 GKeyFile 库 GKeyFile 是一个用于存储和检索按键值对的文件格式,其中按键名称和值可以是任意字符串。在 GKeyFile 文件中,每个条目都由一行文本组成,其中键和值由等号()分隔。 以下是一个使用 g_key_file…

查建设工程规划许可证网站做网站一个月赚多少钱

给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转。 示例 1: 输入:"ab-cd" 输出:"dc-ba"示例 2: 输入:&q…

青岛网架公司新乡网站关键字优化

12、虚函数的应用、虚析构函数 运行时类型信息(RTTI)动态类型转换(dynamic_cast)typeid操作符 虚 析构函数空虚析构函数 一个类中,除了构造函数和静态成员函数外,任何函数都可以被声明为虚函数 运行时类型信息(RTTI) 动态类型转换(dynamic_cast) 用于…

一键注册所有网站杭州职称评审系统网站

文章目录 前言一、什么是 min period?二、为什么检查 min period?三、如何设置 min period?四、如何检查 min period?五、如何修复 min period?总结 前言 我们在实际设计中可能会碰到这种情况,如果我们的m…

哪家网站设计公司好app软件开发的费用设计

由于I / O单元和模块的布放已经在布图规划时完成,因此布局的剩余任务主要是对标准单元的布局。布局方案在布图规划时就已经做了决定,要么选择展平式布局,要么就是层次化布局。 一、布局目标 布局的目标也即布局内容实施之后所要达到的预期值…

建站网站图片不显示专门网站建设

在Ubuntu中使用CSDN复制的代码时,可能会出现\u200的符号,这个符号会影响代码的编译和运行,因此需要找到一种快速删除这种符号的方法。 通过搜索找到了一种替换为空的删除方式,笔者编写了一个适用于Rust的shell脚本,需要…

手机 dns 国外网站鼓楼区建设局网站

ARM v8 Cortex R52内核 02 程序模型 Programmers Model 2.1 关于程序模型 Cortex-R52处理器实现了Armv8-R架构。这包括: 所有的异常级别,EL0-EL2。 每个异常级别下的AArch32执行状态。 T32和A32指令集,其中包括: 浮点运算。 …