苍穹外卖(六) redis缓存解决数据库压力

news2024/11/26 20:25:09

二节 直接用代码操作redis缓存 

三, 四节 间接使用Spring Cache 注解完成redis缓存操作

可直接看三,四节

需要帮助理解注释 回去看第二节

 一.问题说明

二. 实现思路

 通过Redis来缓存菜品数据, 减少数据库查询操作

Redis简介

Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件

key-value结构存储: 

 

主要特点:

  • 基于内存存储,读写性能高
  • 适合存储热点数据(热点商品、资讯、新闻)
  • 企业应用广泛

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。

缓存逻辑分析:

  • 每个分类下的菜品保存一份缓存数据
  • 数据库中菜品数据有变更时清理缓存数据
  • dish_1 就代表一个 分类菜品

原始从数据库中查询菜品代码如下:

 

修改后加入Redis代码

测试:

创建缓存

 (1)

(2)

(3)

(4)

(5) 

 再次测试, 无SQL 语句

清理缓存

修改菜品, 删除菜品, 停售菜品  都要做类似工作

 

三. 改进 : Spring Cache

介绍

Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。

Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache
  • Caffeine
  • Redis(常用)

起步依赖:

常用注解

在spring boot项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching开启缓存支持即可。

例如,使用Redis作为缓存技术,只需要导入Spring data Redis的maven坐标即可。

@CachePut 说明:

​ 作用: 将方法返回值,放入缓存

​ value: 缓存的名称, 每个缓存名称下面可以有很多key

​ key: 缓存的key ----------> 支持Spring的表达式语言SPEL语法

在save方法上加注解@CachePut

当前UserController的save方法是用来保存用户信息的,我们希望在该用户信息保存到数据库的同时,也往缓存中缓存一份数据,我们可以在save方法上加上注解 @CachePut,用法如下:

插入成功后我们看一下Redis中的缓存

@Cacheable 说明:

​ 作用: 在方法执行前,spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中

​ value: 缓存的名称,每个缓存名称下面可以有多个key

​ key: 缓存的key ----------> 支持Spring的表达式语言SPEL语法

@CacheEvict 说明:

​ 作用: 清理指定缓存

 

四. 整体实现步骤 

  1. 导入Spring Cache和Redis相关maven坐标
  2. 在启动类上加入@EnableCaching注解,开启缓存注解功能
  3. 在用户端接口SetmealController的 list 方法上加入@Cacheable注解
  4. 在管理端接口SetmealController的 save、delete、update、startOrStop等方法上加入CacheEvict注解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1092701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2. vue-sy-admin: 基于vue3+TypeScript的自定义指令(directives)的封装及示例

自定义指令directives在项目特别是后台管理类的项目中使用的尤其多(个人经验),每个人编写的自定义指令也各不相同,一个人的时候还没啥感觉,在多人合作的项目中统一编码规范就变得很有必要了,这样看着舒服的同时也更方便后期维护。…

【PyTorchTensorBoard实战】GPU与CPU的计算速度对比(附代码)

0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。 本文基于PyTorch通过tensor点积所需要的时…

【VSCode】Windows环境下,VSCode 搭建 cmake 编译环境(VSCode 插件配置)

目录 一、下载编译器 1、下载 Windows GCC 2、选择编译器路径 二、下载插件 三、配置 cmake generator 四、编译工程 一、下载编译器 1、下载 Windows GCC 这里是在Windows环境下,所以下载的是 Windows 环境使用的 gcc 编译器。 下载地址: MinGW-w64 - for…

【数据库系统概论】第九章关系查询处理何查询优化

9.1查询处理 一:查询处理步骤 关系数据库管理系统查询处理可以分为4个阶段: 查询分析查询检查查询优化查询执行 (1)查询分析 任务:对查询语句进行扫描,分析词法、语法是否符合SQL语法规则 如果没有语…

[MySQL]存储引擎、索引、SQL优化

文章目录 1. 存储引擎1.1 MySQL体系结构1.2 存储引擎简述1.3 存储引擎的特点1.3.1 innoDB1.3.2 MyISAM1.3.3 Memory1.3.4 存储引擎的选择 2. Linux下的MySQL3. 索引3.1 索引概述3.2 索引结构3.3 索引分类3.4 索引语法3.5 索引性能分析3.6 索引的使用3.6.1 索引失效3.6.2 索引使…

【LeetCode刷题(数据结构)】:给定一个链表 每个节点包含一个额外增加的随机指针 该指针可以指向链表中的任何节点或空节点 要求返回这个链表的深度拷贝

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next…

深入探索BP神经网络【简单原理、实际应用和Python示例】

人工神经网络(Artificial Neural Networks)是一种受到生物神经网络启发的机器学习模型,它的应用范围广泛,包括图像识别、语音识别、自然语言处理等领域。其中,BP神经网络(Backpropagation Neural Network&a…

学习笔记-MongoDB(复制集,分片集集群搭建)

复制集群搭建 基本介绍 什么是复制集? 复制集是由一组拥有相同数据集的MongoDB实例做组成的集群。 复制集是一个集群,它是2台及2台以上的服务器组成,以及复制集成员包括Primary主节点,Secondary从节点和投票节点。 复制集提供了…

花2个月时间学习,面华为测开岗要30k,面试官竟说:你不是在搞笑。。。

背景介绍 计算机专业,代码能力一般,之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发,第二份实习由于大三暑假回国的时间比较短(小于两个月),于是找的实习是…

通用考勤后台管理系统

考勤后台系统,包括待办事项、人员管理、任务中心、任务详情、我的任务、客户管理、考勤功能几大功能,本后台系统以考勤打卡为主要功能,采用分屏布局的方式,简洁大方,使用方便

mysqlbinlog 日用记录

我是同步覆盖了两张表,现在想用日志恢复。 先说结论,没有恢复,因为我的日志不完整,设置了定时清理。 如果你truncate了表或者数据库,如果没有完整的日志是恢复不了数据的。 第一、mysqlbinlog 可能没开启 第二、开…

C++入门 第一篇(C++关键字, 命名空间,C++输入输出)

目录 1. C关键字 2. 命名空间 2.1 命名空间定义 2.2命名空间的使用 命名空间的使用有三种方式: 1.加命名空间名称及作用域限定符 2.使用using将命名空间中某个成员引入 3.使用using namespace 命名空间名称 引入 3. C输入&输出 4.缺省函数 4.1 缺省参…

微信开发者工具下载

一、微信开发者工具下载官网 微信开发者工具下载地址与更新日志 | 微信开放文档 (qq.com) 二、微信开发者工具界面 下载安装好后,软件图标如下图所示。 运行软件如下图所示,这时候就需要使用你的管理员账号扫码登录。 登陆后的界面,如下图…

为知笔记一个日记模板

<!DOCTYPE HTML><html><head> <meta http-equiv"Content-Type" content"text/html; charsetunicode"> <title>日记&#xff1a;</title><style id"wiz_custom_css">html, .wiz-editor-body {font-siz…

Lua调用C#类

先创建一个Main脚本作为主入口&#xff0c;挂载到摄像机上 public class Main : MonoBehaviour {// Start is called before the first frame updatevoid Start(){LuaMgr.GetInstance().Init();LuaMgr.GetInstance().DoLuaFile("Main");}// Update is called once p…

Stm32_标准库_11_ADC_光敏热敏传感器_测数值

在测量光敏传感器数值得基础上手动将通道改成热敏传感器通道即可 由于温度传感器的测量范围是-20 ~ 105摄氏度&#xff0c;所以输出温度得考虑带上符号这就需要在原有输出光照强度代码的基础上新添加几个函数 函数1&#xff1a; uint16_t AD_Getvailue(uint8_t ADC_Channel){…

C# PortraitModeFilter (人物图片)背景模糊

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Windows.Forms; us…

python文本转语音

概述 目前有文本转语音的技术&#xff0c;可以用在配音领域&#xff0c;我个人因为一些需求&#xff0c;所以开始寻找这方面的资源&#xff0c;目前各大平台&#xff0c;比如腾讯&#xff0c;讯飞&#xff0c;阿里&#xff0c;百度等都有这样的API服务&#xff0c;我个人是是使…

Multi Scale Supervised 3D U-Net for Kidney and Tumor Segmentation

目录 摘要1 引言2 方法2.1 预处理和数据增强2.2 网络的体系结构2.3 训练过程2.4 推理与后处理 3 实验与结果4 结论与讨论 摘要 U-Net在各种医学图像分割挑战中取得了巨大成功。一些新的、带有花里胡哨功能的架构可能在某些数据集中在使用最佳超参数时取得成功&#xff0c;但它们…

力扣-463.岛屿的周长

Idea 注意观察&#xff0c;每一个完整的方块&#xff0c;边长都是加4&#xff0c;一旦这个方块有其他的方块相邻的话&#xff0c;那么这两个方块总边长就要减少2. 因此我们遍历二维数组的时候&#xff0c;判断岛屿方块的上面还有左方是否有相邻即可 class Solution { public:in…