蓝色脚手架织梦企业网站模板东莞网站建设 塑胶五金
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,一经查实,立即删除!