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

缓存定义

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

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

用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,来进行删除匹配的缓存数据

相关推荐
Engineer邓祥浩2 小时前
设计模式学习(10) 23-8 装饰者模式
python·学习·设计模式
Codeking__2 小时前
Redis初识——Redis的基本特性
数据库·redis·缓存
Errorbot2 小时前
F570四轴飞行器学习笔记
笔记·学习·无人机
GISer_Jing2 小时前
AI学习资源总结:免费开放,入门至深入,持续更新
人工智能·学习·设计模式·prompt·aigc
_Kayo_3 小时前
Node.JS 学习笔记7
笔记·学习·node.js
默大老板是在下3 小时前
【个人成长】我和自己的博弈:在“自我约束”中重构人生系统
笔记·学习·重构·生活
Hello_Embed3 小时前
RS485 双串口通信 + LCD 实时显示(DMA版)
笔记·学习·操作系统·嵌入式·freertos
星期五不见面3 小时前
机器人学习!(二)ROS-基于Gazebo项目-YOLO(3)2026/01/13
人工智能·学习·机器人
im_AMBER3 小时前
Leetcode 103 反转链表 II
数据结构·c++·笔记·学习·算法·leetcode