Redis框架(五):大众点评项目 商品目录 添加Redis缓存

news/2024/11/15 3:44:37/

大众点评项目 商品目录 添加Redis缓存

  • 需求:基于Redis查询商品信息
  • 业务实现
    • 给商品添加缓存
    • 给店铺类型添加缓存
  • 总结和业务流程

SpringCloud章节复习已经过去,新的章节Redis开始了,这个章节中将会回顾Redis实战项目 大众点评
主要依照以下几个原则

  1. 基础+实战的Demo和Coding上传到我的代码仓库
  2. 在原有基础上加入一些设计模式,stream+lamdba等新的糖
  3. 通过DeBug调试,进入组件源码去分析底层运行的规则和设计模式

代码会同步在我的gitee中去,觉得不错的同学记得一键三连求关注,感谢:
Redis优化-链接: RedisProject

需求:基于Redis查询商品信息

为了降低后端负载,提升读写效率和响应时间
我们可以通过缓存存取一些数据信息:存储在db的商品信息,或者前端展示的静态资源

在这里插入图片描述
在这里插入图片描述

业务实现

给商品添加缓存

以往的操作是调用了MP自带的API直接db查询

    /*** 根据id查询商铺信息* @param id 商铺id* @return 商铺详情数据*/@GetMapping("/{id}")public Result queryShopById(@PathVariable("id") Long id) {return Result.ok(shopService.getById(id));

我们进入Service层去修改业务,

  1. 通过@Resource 注入Bean private StringRedisTemplate stringRedisTemplate;
  2. 选取合适的类型存放k-V,这里我选择的是String
  3. 通过JSONUtil.toBean将我们存入Redis的JSON数据转换成相应的Shop.class格式
  4. 如果查不到,就去DB查,这里就是对应的业务逻辑
    @Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result queryById(Long id) {String key = RedisConstants.CACHE_SHOP_KEY + id;String shopStr = stringRedisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopStr)){Shop shop = JSONUtil.toBean(shopStr, Shop.class);return Result.ok(shop);}Shop shop = getById(id);if (shop == null) {return Result.fail("店铺类型不存在!");}stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), RedisConstants.CACHE_NULL_TTL, TimeUnit.HOURS);return Result.ok(shop);}

给店铺类型添加缓存

我们进入Service层去修改业务,

  1. 通过@Resource 注入Bean private StringRedisTemplate stringRedisTemplate;
  2. 选取合适的类型存放k-V,这里我选择的是String
  3. 通过JSONUtil.toBean将我们存入Redis的JSON数据转换成相应的Shop.class格式,这里是List类型
  4. 如果查不到,就去DB查,这里就是对应的业务逻辑
    @Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result queryTypeList() {String key = SHOP_TYPE_KEY;List<ShopType> shopTypeList = JSONUtil.toList(stringRedisTemplate.opsForValue().get(key),ShopType.class);;log.debug("typeList: " + shopTypeList.toString());if(shopTypeList.size()==0){shopTypeList = query().orderByAsc("sort").list();log.debug("typeList: " + shopTypeList.toString());if(shopTypeList==null) {return Result.fail("没有相关信息");}stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shopTypeList), CACHE_NULL_TTL, TimeUnit.HOURS);return Result.ok(shopTypeList);}return Result.ok(shopTypeList);}
}

总结和业务流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/3034.html

相关文章

vivado tcl开发流程

本文以简单的led灯为例&#xff0c;阐述基于tcl的Vivado开发流程。 文件内容编写如下&#xff1a; led.v timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2022/12/12 14:57:22 // Design Name: // Module Name: alu // Project Name: // Target De…

CMake交叉编译工具编写

CMake交叉编译工具编写 CMake交叉编译工具编写CMake交叉编译工具编写前言一、编写toolchain.cmake二、编写CMakeLists.txt三、编写build.sh前言 在嵌入式设备应用时&#xff0c;需要在X86架构下编译板卡需要的ARM架构的文件&#xff0c;需要配置交叉编译器等来完成。这时就需要…

matlab智能算法之遗传算法

智能算法之遗传算法智能算法之遗传算法1.背景2.算法3.案例3.1 案例求解二元函数的最大值智能算法之遗传算法 1.背景 2.算法 3.案例 3.1 案例求解二元函数的最大值 例1&#xff1a;计算二元函数f(x,y)20x2y2−10∗(cos(2πx)cos(2πy))f(x,y)20x^2y^2-10*(cos(2\pi x)cos(2…

手写js——继承

原型链继承 所谓 函数 也就是 函数 Father其本身&#xff0c;也叫作构造函数 &#xff0c;当一个函数被创建的同时&#xff0c;也会为其创建一个 prototype 属性&#xff0c;而这个属性&#xff0c;就是用来指向 函数原型&#xff0c;的我们可以把 prototype 理解为 Father的一…

教育的本质——采用不同学习方式,学习者在两周后还能记住的内容有多少

目录 一、学习金字塔模型 二、学习曲线 三、左右脑交替学习法 一、学习金字塔模型 “学习金字塔模型”&#xff0c;人们学习的效率一共分为七个层次&#xff1a; 第一层 ~ 第四层&#xff1a;这是我们最熟悉不过的形式&#xff0c;在学生时代&#xff0c;老师在上面讲课、…

冯诺依曼体系和操作系统概念

Ⅰ. 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成 输入单元&#xff1a;包括键盘, 鼠标&#xf…

redis 主从复制(读写分离)集群搭建(含错误处理)

目录 1.概述 2.搭建 2.1.安装配置 2.2.认主 2.3.错误处理 3.原理 1.概述 当面临大流量时&#xff0c;redis可以采取集群的方式进行扩容&#xff0c;将压力分散到集群中的多个结点上去防止redis被打挂。redis的扩容方式有两种&#xff1a; 垂直扩容&#xff0c;即读写分离…

MATLAB | 一起来感受数学之美,第一届迷你黑客大赛回顾

Hey真的是好久不见&#xff0c;最近确实是比较忙更新频率也下来了&#xff0c;过段时间应该能恢复正常更新速度&#xff0c;之前给大家解说过今年举办的math is beautiful迷你黑客大赛&#xff0c;但这其实是第二届大赛&#xff0c;本期推送带大家回顾一下第一期大赛&#xff0…