苍穹外卖开发日志Day08——缓存商品(Spring Cache)及购物车
苍穹外卖开发日志Day08——缓存商品及购物车
- 缓存商品及购物车
- 缓存菜品
- 缓存套餐
- 添加购物车
- 查看购物车
- 清空购物车
2025.07.25
一、缓存菜品
1.1 缓存菜品——功能开发
- 问题说明:
- 用户端小程序展示的菜品数据都是通过查询数据库获得的,如果用户端访问量比较大,数据库访问压力随之增大
- 结果:系统响应慢、用户体验差
- 解决方案:
- 通过Redis缓存菜品数据,减少数据库查询操作

- 通过Redis缓存菜品数据,减少数据库查询操作
- 缓存逻辑分析:
- 每个分类下的菜品保存一份缓存数据
- 数据库中菜品数据有变更时清理缓存数据
1.2 缓存菜品——代码实现
1.2.1 user/DishController(添加缓存)
1 |
|
1.2.2 admin/DishController(清理缓存)
1 |
|
1.3 缓存菜品——功能测试
- 添加缓存


- 清理缓存


二、缓存套餐
2.1 Spring Cache
- Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单的加一个注解就能实现缓存功能
- Spring Cache提供了一层抽象,底层可以切换不同的缓存实现,如:
- Ehcache
- Caffeine
- Redis
- Maven依赖:
1
2
3
4
5<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.7.3</version>
</dependency> - 常用注解
@EnableCaching:开启缓存注解功能,通常在启动类上使用@Cacheable:在方法执行前先查询缓存中是否有数据,如果有数据则直接返回缓存数据;如果没有缓存数据,则调用方法并将方法返回值放到缓存中value:缓存的名称key:缓存的键,可以使用SpEL表达式condition:条件表达式,只有满足条件时才会缓存unless:条件表达式,只有不满足条件时才会缓存
@CachePut:将方法的返回值放到缓存中@CacheEvict:将一条或多条数据从缓存中删除allEntries:是否删除所有缓存数据key:缓存的键,可以使用SpEL表达式condition:条件表达式,只有满足条件时才会删除缓存
2.2 缓存套餐——功能开发
- 实现思路:
- 导入Spring Cache和Redis的相关maven坐标
- 在启动类上添加
@EnableCaching注解开启缓存功能 - 在用户端接口SetmealController的list方法上添加
@Cacheable注解 - 在管理员端接口SetmealController的save、update、delete、startOrStop等方法上添加
@CacheEvict注解
2.3 缓存套餐——代码实现
2.3.1 SkyApplication
1 |
|
2.3.2 user/SetmealController
1 |
|
2.3.3 admin/SetmealController
1 | /** |
2.4 缓存套餐——功能测试
- 添加套餐


- 清理缓存


三、添加购物车
3.1 添加购物车——功能开发
- 产品原型


- 接口设计
- 请求方式:POST
- 请求路径:/user/shoppingCart/add
- 请求参数:套餐id、菜品id、口味
- 返回结果:code、data、msg

- 数据库设计
- 作用:暂时存放所选商品的地方
- 选的什么商品
- 每个商品买了几个
- 不同用户的购物车需要分开

3.2 添加购物车——代码实现
3.2.1 ShoppingCartController
1 |
|
3.2.2 ShoppingCartService
1 | public interface ShoppingCartService { |
3.2.3 ShoppingCartServiceImpl
1 |
|
3.2.4 ShoppingCartMapper
1 |
|
3.2.5 ShoppingCartMapper.xml
1 |
|
3.3 添加购物车——功能测试
- 添加购物车

四、查看购物车
4.1 查看购物车——功能开发
- 产品原型

- 接口设计

4.2 查看购物车——代码实现
4.2.1 ShoppingCartController
1 | /** |
4.2.2 ShoppingCartService
1 | /** |
4.2.3 ShoppingCartServiceImpl
1 | /** |
4.3 查看购物车——功能测试
- 查看购物车

五、清空购物车
5.1 清空购物车——功能开发
- 产品原型

- 接口设计

5.2 清空购物车——代码实现
5.2.1 ShoppingCartController
1 | /** |
5.2.2 ShoppingCartService
1 | /** |
5.2.3 ShoppingCartServiceImpl
1 | /** |
5.2.4 ShoppingCartMapper
1 | /** |
5.3 清空购物车——功能测试
- 清空购物车


