Redis---------实现查询缓存业务

目录

 

 数据库与缓存之间的工作业务逻辑:

 接下来看查询缓存代码实现,主要是捋清楚业务逻辑,代码实现是死的:

 Controller:

Service:

 P37作业实现:总体逻辑跟上面的业务逻辑差不多

Controller:

 Service:

总结


 

 数据库与缓存之间的工作业务逻辑:

5ca5fd6551484717ab11776cf9052097.png

 接下来看查询缓存代码实现,主要是捋清楚业务逻辑,代码实现是死的:

 Controller:

@RestController
@RequestMapping("/shop")
public class ShopController {@Resourcepublic IShopService shopService;/*** 根据id查询商铺信息* @param id 商铺id* @return 商铺详情数据*/@GetMapping("/{id}")public Result queryShopById(@PathVariable("id") Long id) {return shopService.queryById(id);}}

Service:

@Service
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result queryById(Long id) {//1,根据id现在Redis缓存中查询数据String shopJson = stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY + "id");//2,如果命中就直接把结果返回就可以if (StrUtil.isNotBlank(shopJson)) {Shop shop = JSONUtil.toBean(shopJson, Shop.class);return Result.ok(shop);}//3,如果没命中就去数据库查询该数据Shop shop = getById(id);//4,如果数据库中也没查到就返回错误if(shop == null){return Result.fail("数据不存在!");}//5,如果查到了就先把该数据写到Redis中String toString = JSONUtil.toJsonStr(shop);stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + "id",toString);//6,最后再把数据返回到前端return Result.ok(shop);}
}

 

 P37作业实现:总体逻辑跟上面的业务逻辑差不多

Controller:

@RestController
@RequestMapping("/shop-type")
public class ShopTypeController {@Resourceprivate IShopTypeService typeService;@GetMapping("list")public Result queryTypeList() {return typeService.listType_list();}
}

 Service:

@Service
public class ShopTypeServiceImpl extends ServiceImpl<ShopTypeMapper, ShopType> implements IShopTypeService {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result listType_list() {//1,根据id现在Redis缓存中查询数据String shop_type_JSONS = stringRedisTemplate.opsForValue().get(CACHE_SHOP_TYPE_KEY+"TP");//2,如果命中就直接把结果返回就可以if (StrUtil.isNotBlank(shop_type_JSONS)) {//把字符串对象转换为List对象System.out.println("Redis中查到的数据:objects = " + JSONUtil.toList(shop_type_JSONS,ShopType.class));return Result.ok(JSONUtil.toList(shop_type_JSONS,ShopType.class));}//3,如果没命中就去数据库查询该数据List<ShopType> list = list();//4,如果数据库中也没查到就返回错误if(list == null){return Result.fail("404");}//5,如果查到了就先把该数据写到Redis中String s = JSONUtil.toJsonStr(list);//把List转换为JSON对象stringRedisTemplate.opsForValue().set(CACHE_SHOP_TYPE_KEY+"TP",s,30, TimeUnit.MINUTES);//6,最后再把数据返回到前端return Result.ok(list);}
}

总结

 这种查询缓存是非常基础的,一定要理解他的逻辑处理顺序:①前端发送请求数据②根据前端需要进行查询数据业务③首先我们去Redis中查,看是否Redis中有该数据,如果命中就直接返回④如果没有命中,就去数据库中查询 ⑤数据库查询出来先判断是否查出来了数据,如果没有就直接返回错误⑥如果查出来有数据,就把该数据存到Redis中⑦最后再把该数据返回前端,这样下一次查询就可以直接在Redis中得到数据

 

 

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

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

相关文章

由于找不到vcruntime140_1.dll无法继续执行此代码的8个解决方法

vcruntime140_1.dll 是一个动态链接库&#xff08;Dynamic Link Library&#xff09;文件&#xff0c;它是Microsoft Visual C Redistributable包的一部分&#xff0c;特别与Visual Studio 2015及之后版本的C运行时环境关联紧密。此文件包含了执行基于Visual C开发的应用程序所…

如何快速的追加文章的内容(在不知道内容的情况下)

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 1、打开工具&#xff0c;切换到文章模块下&#xff0c;快捷键&#xff1a;Ctrl1 2、新建一个文章做演示&#xff0c;001 3、添加一个内容&#xff0c;就随…

订票系统|基于Springboot+vue的火车票订票系统(源码+数据库+文档)

订票系统目录 基于Springbootvue的火车票订票系统 一、前言 二、系统设计 三、系统功能设计 1会员信息管理 2 车次信息管理 3订票订单管理 4留言板管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍…

RoNID:通过生成可靠标签与聚类友好型表征来实现新意图的发现

论文地址&#xff1a;https://arxiv.org/abs/2404.08977 原文地址&#xff1a;intents-are-not-going-away-ronid-is-a-new-intent-discovery-framework 2024 年 4 月 26 日 Robust New Intent Discovery&#xff08;RoNID&#xff09;框架致力于在开放域场景中识别已知意图并合…

韩国云主机安装AMP环境要求科普

AMP环境&#xff0c;即Apache、MySQL和PHP的组合&#xff0c;是许多网站开发者和运维人员常用的环境配置。在韩国云主机上安装AMP环境&#xff0c;需要满足一定的要求以确保顺利运行和高效性能。下面我们将对韩国云主机安装AMP环境的要求进行科普。 首先&#xff0c;韩国云主机…

Vue Canvas图片水印的绘制 图片加水印

效果 定义画布 <canvas width"800" height"800" ref"cn" ></canvas>绘制水印 draw(){const img new Image()img.srchttps://img1.baidu.com/it/u3035183739,1826404114&fm253&fmtauto&app138&fJPEGimg.onload(()…

java版数据结构:深入理解栈和队列:数据结构与应用(vector,stack,queue)

目录 前言 动态数组类&#xff08;vector&#xff09; 特点&#xff1a; 应用&#xff1a; 栈&#xff08;Stack&#xff09; 栈的基础概念&#xff1a; 栈的常用方法&#xff1a; 模拟栈操作&#xff1a; 队列&#xff08;Queue&#xff09; 队列的基础概念 队列的常…

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM 2024/5/2 16:29 1、默认编译为AMD64/INTEL的x64架构的可执行文件&#xff1a; rootrootrootroot-ThinkBook-16-G5-IRH:~$ rootrootrootroot-ThinkBook-16-G5-IRH:~$ unzip Quectel_QConnectManager_Lin…

如何配置和使用Apollo的component里的plugin

关于如何使用Apollo的Component里的plugin&#xff0c;在Apollo的文档里只有如果和开发的说明却没有找到一个清楚完整说明怎么把plugin跑起来的说明&#xff0c;例如我想把lidar_detection_filter按我们的需求对目标过滤算法作修改然后编译完后&#xff0c;执行 cyber_launch …

2024年【浙江省安全员-C证】考试及浙江省安全员-C证找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【浙江省安全员-C证】考试及浙江省安全员-C证找解析&#xff0c;包含浙江省安全员-C证考试答案和解析及浙江省安全员-C证找解析练习。安全生产模拟考试一点通结合国家浙江省安全员-C证考试最新大纲及浙江省安全…

12 Junit单元测试、反射、注解

单元测试 介绍 Junit单元测试是做什么的&#xff1f; 就是针对最小的功能单元(方法)&#xff0c;编写测试代码对其进行正确性测试。 Junit单元测试框架 可以用来对方法进行测试&#xff0c;它是由Junit公司开源出来的 Junit单元测试的优点是什么&#xff1f; 可以灵活的…

智能消费记账|基于SSM+vue的大学生智能消费记账系统(源码+数据库+文档)

智能消费记账目录 基于SSMvue的大学生智能消费记账系统 一、前言 二、系统设计 三、系统功能设计 1 用户列表 2 预算信息管理 3 预算类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1…

JavaScript百炼成仙自学笔记——3

外门小比 JavaScript运算符 var a 10; var b 2; var s1 a b; var s2 a - b; var s3 a * b; var s4 a / b; var a 10; var b a; var console.log(b); 同理还有a&#xff0c;就是先对a本身进行运算&#xff0c;然后再用a的值 var a 1; var b; var sum (b a--a) a--…

【Excel】excel连接数字和符号

使用“&”对数字和符号进行连接 示例&#xff1a; 将“2.6”和“&#xff0c;”连成“2.6&#xff0c;” 连接公式为&#xff1a; V3&W3 V3和W3分别是"2.6"和“&#xff0c;”在excel中的位置

Word文件导出为PDF

Word文件导出为PDF 方法一、使用Word自带另存为PDF功能 打开需要转换为PDF格式的Word文件&#xff0c;依次点击【文件】➡【另存为】➡选择文件保存类型为.PDF 使用这种方法导出的PDF可能存在Word中书签丢失的情况&#xff0c;在导出界面点击&#xff0c;选项进入详细设置 勾…

ICode国际青少年编程竞赛- Python-1级训练场-for循环入门

ICode国际青少年编程竞赛- Python-1级训练场-for循环入门 1、 for i in range(4):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(6)Dev.turnRight()3、 for i in range(3):Dev.turnRight()Dev.step(2)Dev.turnLeft()Dev.step(-3)4、 for i in range(4):Dev…

GPT-1

GPT 系列是 OpenAI 的一系列预训练模型&#xff0c;GPT 的全称是 Generative Pre-Trained Transformer&#xff0c;顾名思义&#xff0c;GPT 的目标是通过 Transformer&#xff0c;使用预训练技术得到通用的语言模型。目前已经公布论文的有 GPT-1、GPT-2、GPT-3。 最近非常火的…

数据结构学习/复习4--链表的实现/链表练习题/二级指针与一级指针在链表实现中的运用

一、链表的实现&#xff08;写法不唯一&#xff0c;此处多处用二级指针&#xff09; 二、链表实现总结 1.二级指针存储一级指针 2.改变一级指针需要用到二级指针&#xff0c;本次使用二级指针进行修改 注意写法不唯一&#xff0c;也有不用二级指针写法 3.链表的结构体(节点)内…

第13章 软件测评相关标准

一、标准化概述 &#xff08;一&#xff09;概念 1、标准 一定范围内获得最佳秩序&#xff0c;经协商一致并由公认机构批准共同使用和重复使用的一种规范性文档&#xff0c;是标准化活动的核心产物。 2、标准化 一定范围内获得最佳秩序&#xff0c;对现实问题和潜在问题制…

ShellScript脚本编程(一)

什么是Shell Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服务 为什么…