学习笔记-缓存&添加购物车

缓存定义

缓存是指在更高速的存储介质中,临时保存常用或近期访问数据的技术与机制

其目的是减少重复计算或重复访问慢速数据源,从而提升系统响应速度和整体性能

用redis来缓存菜品数据实现思路

通过Redis来缓存菜品数据,来减少数据库的查询操作(通过redis来完成对于内存其中数据来进行实际的查询操作)

其中redis是基于内存来进行缓存数据内容的,因此对应的就是基于内存对于数据来进行操作

  1. 首先用户端小程序来查询菜品数据
  2. 请求到对应的后端服务
  3. 由于缓存来解决访问数据,因此此处并不需要去查询对应的数据其中,我们可以直接来查询对应的缓存其中是否存在对应的数据
    1. 缓存其中有对应的菜品数据,则不需要去查询数据库其中内容
    2. 没有,则再去查询对应的数据库其中的数据

缓存菜品-代码开发-缓存菜品和数据

改造我们当前的查询数据的代码,将当前对应的查询到的商品数据将其来进行缓存起来

-->通过对应的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 缓存的 keydishDTO.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,来进行删除匹配的缓存数据

相关推荐
yyyyy_abc6 小时前
ceph学习笔记
笔记·ceph·学习
晓梦林6 小时前
ximai靶场学习笔记
android·笔记·学习
nashane6 小时前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
IT19956 小时前
Dify笔记-创建自定义工具连接到自建的OpenAPI Schema服务
笔记
一口吃俩胖子7 小时前
【脉宽调制DCDC功率变换学习笔记021】时域性能准则
笔记·学习
秋98 小时前
windows中安装redis
数据库·redis·缓存
starvapour8 小时前
SSH笔记
笔记·ssh
@杰克成8 小时前
Java学习30
java·开发语言·学习
三品吉他手会点灯8 小时前
C语言学习笔记 - 40.数据类型 - scanf函数的编程规范与非法输入处理
c语言·开发语言·笔记·学习
大G的笔记本9 小时前
synchronized 的原理(简单版)
笔记