当前位置: 首页 > news >正文

8.10 用redis实现缓存功能和Spring Cache

什么是缓存?
缓存(Cache), 就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。

通过Redis来缓存数据,减少数据库查询操作;
在这里插入图片描述
逻辑
每个分类的菜品保存一份缓存数据
数据库菜品数据有变更时清理缓存数据

如何将商品数据缓存起来。

   @GetMapping("/list")@ApiOperation("根据分类id查询菜品")public Result<List<DishVO>> list(Long categoryId) {//查询redis里面是否存在数据类;String key="dish_"+categoryId;//如果存在直接返回List<DishVO> list = (List<DishVO>) redisTemplate.opsForValue().get(key);if (list!=null&&list.size()>0){return Result.success(list);}//不存在需要查询数据库,并保存至redis里面Dish dish = new Dish();dish.setCategoryId(categoryId); //设置套餐的iddish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品list = dishService.listWithFlavor(dish);redisTemplate.opsForValue().set(key,list); //将他缓存起来return Result.success(list);}

在这里插入图片描述
控制台没有sql了,说明缓存已经实现了。

二 数据内容发生改变的时候,需要修改redis的内容。

修改操作、删除菜品、起售或者停售、新建菜品也需要缓存数据

private void  cleanCache(String pattern){Set keys = redisTemplate.keys(pattern);redisTemplate.delete(keys); //支持删除集合的}

删除对应的缓存数据

缓存套餐功能
spring Cache 实现了基于注解的缓存功能
在这里插入图片描述

   <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

对应的maven坐标

注解开发
在这里插入图片描述
Cacheable 在方法执行前查询缓存是否有数据;
在这里插入图片描述
在这里插入图片描述

相关文章:

8.10 用redis实现缓存功能和Spring Cache

什么是缓存? 缓存(Cache), 就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。 通过Redis来缓存数据&#xff0c;减少数据库查询操作; 逻辑 每个分类的菜品保存一份缓存数据 数据库菜品数据有变更时清理缓存数据 如何将商品数据缓存起…...

SPI协议个人记录

SPI协议 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行接口技术&#xff0c;由Motorola公司推出。SPI总线系统是一种同步串行外设接口&#xff0c;允许MCU与各种外围设备以串行方式进行通信和数据交换。外围设备包括FLASHRAM、A/D转换器、网络控制器…...

【深度学习 video detect】Towards High Performance Video Object Detection for Mobiles

文章目录 摘要IntroductionRevisiting Video Object Detection BaselinePractice for Mobiles Model Architecture for MobilesLight Flow 摘要 尽管在桌面GPU上取得了视频目标检测的最近成功&#xff0c;但其架构对于移动设备来说仍然过于沉重。目前尚不清楚在非常有限的计算…...

时序预测 | MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比

时序预测 | MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比 目录 时序预测 | MATLAB实现EEMD-LSTM、LSTM集合经验模态分解结合长短期记忆神经网络时间序列预测对比效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 时序预测 | …...

【软件工程】面向对象方法-RUP

RUP&#xff08;Rational Unified Process&#xff0c;统一软件开发过程&#xff09;。 RUP特点 以用况驱动的&#xff0c;以体系结构为中心的&#xff0c;迭代增量式开发 用况驱动 用况是能够向用户提供有价值结果的系统中的一种功能用况获取的是功能需求 在系统的生存周期中…...

Golang 的面向对象

文章目录 duck typingnil不一定是空接口组合代替继承接口转换回具体的类型使用switch匹配接口的原始类型 duck typing golang中实现某个接口不需要像其它语言使用 implemet 去继承实现&#xff0c;而是只要你的结构体包含接口所需的方法即可 package mainimport "fmt&qu…...

STABLE DIFFUSION模型及插件的存放路径

记录下学习SD的一些心得&#xff0c;使用的是秋叶大佬的集成webui&#xff0c;下载了之后点击启动器即可开启&#xff0c;文件夹中的内容如下 主模型存放在models文件下的stable-diffusion文件夹内&#xff0c;一些扩展类的插件是存放在extensions文件夹下...

Three.js 设置模型材质纹理贴图和修改材质颜色,材质透明度,材质网格

相关API的使用&#xff1a; 1 traverse &#xff08;模型循环遍历方法&#xff09; 2. THREE.TextureLoader&#xff08;用于加载和处理图片纹理&#xff09; 3. THREE.MeshLambertMaterial&#xff08;用于创建材质&#xff09; 4. getObjectByProperty&#xff08;通过材…...

docker 安装mongodb 虚拟机安装mongodb

生产环境直接安装比较好&#xff0c;以及使用集群环境&#xff0c;本文仅测试交流使用&#xff0c;我用来写分布式im测试使用&#xff1a; nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate&#xff08;长连接服务&#xff09; logic &#xff08;业务&…...

在SockJS+Spring Websocket中convertAndSendToUser中的“用户”来自哪里?

目录 一、前言二、Principal三、使用 一、前言 我们知道可以使用客户端订阅的主题前缀从 stomp 服务器向客户端发送消息&#xff0c;例如 /topic/hello。我们还知道我们可以向特定用户发送消息&#xff0c;因为 spring 提供了convertAndSendToUser(username, destination, mes…...

【软件测试】我的2023面试经验谈

最近行业里有个苦涩的笑话&#xff1a;公司扛过了之前的三年&#xff0c;没扛过摘下最近的一年&#xff0c;真是让人想笑又笑不出来。年前听说政策的变化&#xff0c;大家都满怀希望觉得年后行情一片大好&#xff0c;工作岗位激增&#xff0c;至少能有更多的机会拥抱未来。然而…...

SpringBoot 整合JDBC

SpringData简介 Sping Data 官网&#xff1a;https://spring.io/projects/spring-data数据库相关的启动器 &#xff1a;可以参考官方文档&#xff1a;https://docs.spring.io/spring-boot/docs/2.6.5/reference/htmlsingle/#using-boot-starter 整合JDBC 创建测试项目测试数据…...

TypeScript使用npm安装报错问题

问题如图&#xff1a; 问题原因&#xff1a; 权限不足导致&#xff0c;可以输入如下命令&#xff1a; sudo npm install i -g typescript该命令会要求输入登录密码相关&#xff0c;稍等片刻&#xff0c;即可安装成功。检测安装的命令&#xff1a; tsc -v...

2023国赛数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …...

学习pytorch 3 tensorboard的使用

tensorboard的使用 1. 安装2. add_scalar 查看函数图形3. 查看结果4. add_image() 查看训练步骤中间结果的图片 1. 安装 pytorch conda环境 pip install tensorboard pip install opencv-python2. add_scalar 查看函数图形 常用来查看 train val loss等函数图形 from torch…...

Linux 命令篇

一、启动网络命令 ip addr 查看网卡信息 service network start 启动网卡 service network stop 关闭网卡 service network restart 重启网络 二、pwd 命令 查看当前目录的路径 linux 下所有的绝对路径都是从根目录 "/" 开始 root:是linux下root用户的根目…...

OpenCV-SIFT算法详解

系列文章目录 文章目录 系列文章目录引言一、高斯金字塔二、高斯差分金字塔三、特征点处理四、特征点描述子总结 引言 SIFT算法是为了解决图片的匹配问题&#xff0c;想要从图像中提取一种对图像的大小和旋转变化保持鲁棒的特征&#xff0c;从而实现匹配。这一算法的灵感也十分…...

Java中的接口到底是什么?

要说Java的【接口】&#xff0c;可以将其类比为现实生活中的一种约定或规范。在Java中&#xff0c;接口定义了一组方法的集合&#xff0c;但没有提供这些方法的具体实现。 你可以将接口看作是一个合同&#xff0c;它规定了一个类必须实现的一组方法。这些方法描述了类所需具备…...

Jpa与Druid线程池及Spring Boot整合(一): spring-boot-starter-data-jpa 搭建持久层

Jpa与Druid线程池及Spring Boot整合(一) Jpa与Druid线程池及Spring Boot整合(二)&#xff1a;几个坑 附录官网文档&#xff1a;core.domain-events域事件 (一)Jpa与Druid连接池及Spring Boot整合作为持久层,遇到系列问题,下面一 一记录&#xff1a; pom.xml 文件中加入必须的…...

helm部署vmalert

先决条件 安装以下软件包&#xff1a;git, kubectl, helm, helm-docs&#xff0c;请参阅本教程。 在 CentOS 上启用 snap 并安装 helm 启用 snapd 使用以下命令将 EPEL 存储库添加到您的系统中&#xff1a; sudo yum install epel-release 按如下方式安装 Snap&#xff1…...

强力解锁Unity开发:Zenject依赖注入框架的5大实战优势

强力解锁Unity开发&#xff1a;Zenject依赖注入框架的5大实战优势 【免费下载链接】Zenject Dependency Injection Framework for Unity3D 项目地址: https://gitcode.com/gh_mirrors/ze/Zenject Zenject是Unity3D生态中最强大的依赖注入框架&#xff0c;它通过解耦组件…...

在Windows 11上为Intel Iris Xe显卡配置PyTorch CPU环境:从Anaconda到成功验证

1. 为什么选择PyTorch CPU版本&#xff1f; 很多刚入门深度学习的同学可能会疑惑&#xff1a;为什么我的Intel Iris Xe显卡不能用GPU加速&#xff1f;其实这个问题涉及到硬件架构的差异。NVIDIA显卡之所以能加速深度学习计算&#xff0c;是因为它们内置了专门设计的CUDA核心&am…...

Arduino嵌入式Modbus RTU通信实战指南

1. ModbusRTU库深度解析&#xff1a;面向嵌入式工程师的RS485工业通信实践指南Modbus RTU是一种在工业自动化领域广泛采用的串行通信协议&#xff0c;以其简洁性、鲁棒性和对噪声环境的强适应性著称。modbusrtu库是专为Arduino平台设计的轻量级实现&#xff0c;其核心目标并非提…...

【单片机实战指南】从零构建:基于80C51与数码管的可编程定时器

1. 项目背景与核心功能 第一次接触单片机开发时&#xff0c;我被数码管显示数字的效果深深吸引。这次我们要做的可编程定时器&#xff0c;本质上是一个带定制化上限的数字秒表。使用最常见的80C51单片机搭配两位共阳数码管&#xff0c;通过定时器中断实现精准计时。最有趣的是这…...

智微智能联合英特尔发布Gaudi2E四卡液冷工作站,赋能企业私有化AI算力

当前&#xff0c;AI技术正以前所未有的速度重塑千行百业。从大模型训练到智能体应用&#xff0c;从多模态内容生成到企业级代码开发&#xff0c;企业对AI计算的需求已不再局限于云端算力&#xff0c;而是愈发追求本地化部署、高性能输出与高安全保障。针对这一趋势&#xff0c;…...

南京旅行避坑!选本地地陪的真实经验分享

现代社会&#xff0c;大家压力都大&#xff0c;焦虑感如影随形&#xff0c;所以很多人都盼着旅行来给自己松松弦。我之前去南京自由行&#xff0c;就没请专业的本地陪同服务&#xff0c;结果那趟旅行简直是噩梦&#xff0c;比上班还累。出发前&#xff0c;我觉得自己做攻略能省…...

响应式公司网站设计制作:适配手机、平板的关键技巧

大家肯定有过这样的体验&#xff0c;有些网站在电脑端使用起来还不错&#xff0c;但是并没有做相应的移动端口的适配&#xff0c;导致在用手机浏览的时候&#xff0c;非常不便&#xff0c;大大降低了网页的使用率。随着移动端设备的不断普及和发展&#xff0c;导致网页设计也从…...

C# 面试高频题:装箱和拆箱是如何影响性能的?非

OCP原则 ocp指开闭原则&#xff0c;对扩展开放&#xff0c;对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则&#xff08;DIP&#xff09; 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程&#xff0c; 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...

如何用QtScrcpy实现Android设备实时投屏:终极免费解决方案

如何用QtScrcpy实现Android设备实时投屏&#xff1a;终极免费解决方案 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScr…...

CVPR 2023论文CDDFuse实战:用Python复现多模态图像融合的双分支特征分解模型

CVPR 2023论文CDDFuse实战&#xff1a;用Python复现多模态图像融合的双分支特征分解模型 当红外与可见光图像在军事侦察、医疗诊断等领域需要协同工作时&#xff0c;传统融合方法往往难以平衡细节保留与特征互补。CVPR 2023最佳论文候选CDDFuse提出了一种创新方案——通过双分支…...