缓存定义
缓存是指在更高速的存储介质中,临时保存常用或近期访问数据的技术与机制 ,
其目的是减少重复计算或重复访问慢速数据源,从而提升系统响应速度和整体性能。
用redis来缓存菜品数据实现思路
通过Redis来缓存菜品数据,来减少数据库的查询操作(通过redis来完成对于内存其中数据来进行实际的查询操作)
其中redis是基于内存来进行缓存数据内容的,因此对应的就是基于内存对于数据来进行操作

- 首先用户端小程序来查询菜品数据
- 请求到对应的后端服务
- 由于缓存来解决访问数据,因此此处并不需要去查询对应的数据其中,我们可以直接来查询对应的缓存其中是否存在对应的数据
- 缓存其中有对应的菜品数据,则不需要去查询数据库其中内容
- 没有,则再去查询对应的数据库其中的数据
缓存菜品-代码开发-缓存菜品和数据
改造我们当前的查询数据的代码,将当前对应的查询到的商品数据将其来进行缓存起来

-->通过对应的RedisTemplate来操作Redis进行缓存操作
如何在Spring boot项目其中来使用对应的RedisTemplate对象?


具体实现
通过注入的redis来操作进行查询redis其中是否存在菜品数据
Redis 就是一个存在内存里的小型数据库 ,非常快,数据以 键值对(key-value) 形式保存,

DishController
动态的构造对应的我们需要的key,来查询或者后续放入redis其中数据库


首先对应的构造redis其中的key,通过key去对应的redis其中来相应的进行获取值
对应通过通过查询,数据已经存在,则直接进行返回

判断从redis数据库其中查询到的数据是否存在
à数据存在,对应的直接展示,无需再次来查询redis其中的数据
à数据若不存在的话,则查询数据库,将查询到的数据放入对应的redis其中即可
清理缓存
注意:
当我们来使用对应的redis缓存数据时,我们一定需要来保证数据的一致性
(也就是当对应的数据库其中的数据变更时,对应的缓存其中的数据我们也需要来进行实际的变更操作)
数据一致性:
指的是如果对应的数据库其中的数据发生变更时,对应的redis其中的数据也需要来进行实际的变更操作
总结:增删改,起售/停售菜品都需要来进行对应的清理缓存操作

新增菜品对应修改

@PostMapping("/save"):表示这是一个 POST 请求,访问的 URL 路径是 /save
@RequestBody DishDTO dishDTO:接收客户端请求体中的数据,并将其自动绑定到 DishDTO 对象
保存菜品数据,并且来清理缓存
String key = "dish_" + dishDTO.getCategoryId();
redisTemplate.delete(key);
这里根据菜品的分类 ID 构建一个 Redis 缓存的 key。dishDTO.getCategoryId() 获取菜品的分类 ID
使用 redisTemplate.delete(key) 删除缓存中与该 key 相关的数据。
菜品批量删除-缓存数据清理操作

@DeleteMapping("/delete"):对应删除操作 访问路径为 /delete
dishService.deleteBatch(ids):批量来删除菜品内容

来进行通过 redisTemplate.keys("dish*") 获取所有符合 "dish*" 模式的 Redis 缓存的 key
并且使用使用 redisTemplate.delete(keys) 删除上述获取到的所有 keys 对应的缓存数据。
起售、停售操作缓存数据清理

@PostMapping("/status/{status}"):处理 HTTP POST 请求的接口,路径是 /status/{status}
调用服务方法进行状态修改

删除相关的 Redis 缓存数据
redisTemplate.keys("dish_*"):这个方法会返回所有符合 "dish_*" 模式的 Redis 缓存的 key,来进行删除匹配的缓存数据: