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

Redis-实战篇-什么是缓存-添加redis缓存

文章目录

  • 1、什么是缓存
  • 2、添加商户缓存
  • 3、前端接口
  • 4、ShopController.java
  • 5、ShopServiceImpl.java
  • 6、RedisConstants.java
  • 7、查看Redis Desktop Manager

1、什么是缓存

缓存就是数据交换的缓冲区(称为Cache),是存贮数据的临时地方,一般读写性能较高。

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

2、添加商户缓存

在这里插入图片描述

3、前端接口

http://127.0.0.1:8080/api/shop/1

在这里插入图片描述

4、ShopController.java

package com.hmdp.controller;import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hmdp.dto.Result;
import com.hmdp.entity.Shop;
import com.hmdp.service.IShopService;
import com.hmdp.utils.SystemConstants;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;/*** <p>* 前端控制器* </p>*/
@RestController
@RequestMapping("/shop")
public class ShopController {@Resourcepublic IShopService shopService;/*** 根据id查询商铺信息* @param id 商铺id* @return 商铺详情数据*/@GetMapping("/{id}")public Result queryShopById(@PathVariable("id") Long id) {//return Result.ok(shopService.getById(id));return shopService.queryById(id);}/*** 新增商铺信息* @param shop 商铺数据* @return 商铺id*/@PostMappingpublic Result saveShop(@RequestBody Shop shop) {// 写入数据库shopService.save(shop);// 返回店铺idreturn Result.ok(shop.getId());}/*** 更新商铺信息* @param shop 商铺数据* @return 无*/@PutMappingpublic Result updateShop(@RequestBody Shop shop) {// 写入数据库shopService.updateById(shop);return Result.ok();}/*** 根据商铺类型分页查询商铺信息* @param typeId 商铺类型* @param current 页码* @return 商铺列表*/@GetMapping("/of/type")public Result queryShopByType(@RequestParam("typeId") Integer typeId,@RequestParam(value = "current", defaultValue = "1") Integer current) {// 根据类型分页查询Page<Shop> page = shopService.query().eq("type_id", typeId).page(new Page<>(current, SystemConstants.DEFAULT_PAGE_SIZE));// 返回数据return Result.ok(page.getRecords());}/*** 根据商铺名称关键字分页查询商铺信息* @param name 商铺名称关键字* @param current 页码* @return 商铺列表*/@GetMapping("/of/name")public Result queryShopByName(@RequestParam(value = "name", required = false) String name,@RequestParam(value = "current", defaultValue = "1") Integer current) {// 根据类型分页查询Page<Shop> page = shopService.query().like(StrUtil.isNotBlank(name), "name", name).page(new Page<>(current, SystemConstants.MAX_PAGE_SIZE));// 返回数据return Result.ok(page.getRecords());}
}

在这里插入图片描述

5、ShopServiceImpl.java

package com.hmdp.service.impl;import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.hmdp.dto.Result;
import com.hmdp.entity.Shop;
import com.hmdp.mapper.ShopMapper;
import com.hmdp.service.IShopService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import static com.hmdp.utils.RedisConstants.CACHE_SHOP_KEY;/*** <p>*  服务实现类* </p>*/
@Service
public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop> implements IShopService {@Resourceprivate StringRedisTemplate stringRedisTemplate;@Overridepublic Result queryById(Long id) {String key = CACHE_SHOP_KEY + id;//1、从redis查询商铺缓存String shopJson = stringRedisTemplate.opsForValue().get(key);//2、判断是否存在if (StrUtil.isNotBlank(shopJson)) {//3、存在,直接返回Shop shop = JSONUtil.toBean(shopJson, Shop.class);return Result.ok(shop);}//4、不存在,根据id查询数据库Shop shop = getById(id);//5、数据库不存在,返回错误if (shop == null) {return Result.fail("店铺不存在!");}//6、存在,写入redisstringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop));//7、返回return Result.ok(shop);}
}

在这里插入图片描述

6、RedisConstants.java

package com.hmdp.utils;public class RedisConstants {public static final String LOGIN_CODE_KEY = "login:code:";public static final Long LOGIN_CODE_TTL = 2L;public static final String LOGIN_USER_KEY = "login:token:";public static final Long LOGIN_USER_TTL = 36000L;public static final Long CACHE_NULL_TTL = 2L;public static final Long CACHE_SHOP_TTL = 30L;public static final String CACHE_SHOP_KEY = "cache:shop:";public static final String LOCK_SHOP_KEY = "lock:shop:";public static final Long LOCK_SHOP_TTL = 10L;public static final String SECKILL_STOCK_KEY = "seckill:stock:";public static final String BLOG_LIKED_KEY = "blog:liked:";public static final String FEED_KEY = "feed:";public static final String SHOP_GEO_KEY = "shop:geo:";public static final String USER_SIGN_KEY = "sign:";
}

在这里插入图片描述

7、查看Redis Desktop Manager

在这里插入图片描述

相关文章:

  • 安卓应用开发学习:通过腾讯地图SDK实现定位功能
  • 在Spring Boot项目中引入本地JAR包的步骤和配置
  • 【SkiaSharp绘图14】SKCanvas方法详解(三)URL注释、按顶点绘制、 是否裁切区域之外、旋转、缩放、倾斜、平移、保存/恢复画布
  • Linux_fileio实现copy文件
  • RK3568平台(USB篇)USB HID设备
  • 【文件上传】
  • Linux CentOS 环境 MySQL 主从复制集群搭建
  • 电信NR零流量小区处理
  • java 操作 milvus 2.1.4
  • 税务笔记()
  • 性能调优 性能监控
  • Hadoop3:Yarn框架的三种调度算法
  • SUPERVIVE无法联机、联机失败、联机报错的解决办法分享
  • AI与音乐:终极对决,机械混音师将扬弃人类知识!
  • Webpack: 开发 PWA、Node、Electron 应用
  • ➹使用webpack配置多页面应用(MPA)
  • 30秒的PHP代码片段(1)数组 - Array
  • AngularJS指令开发(1)——参数详解
  • gops —— Go 程序诊断分析工具
  • HTTP--网络协议分层,http历史(二)
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • leetcode388. Longest Absolute File Path
  • Logstash 参考指南(目录)
  • magento2项目上线注意事项
  • MySQL的数据类型
  • python 装饰器(一)
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spark学习笔记之相关记录
  • 复杂数据处理
  • 聊聊sentinel的DegradeSlot
  • 排序算法学习笔记
  • 微信开放平台全网发布【失败】的几点排查方法
  • 用Python写一份独特的元宵节祝福
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • #vue3 实现前端下载excel文件模板功能
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (function(){})()的分步解析
  • (Python) SOAP Web Service (HTTP POST)
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (六)软件测试分工
  • (四)c52学习之旅-流水LED灯
  • (四)事件系统
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (转)http-server应用
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NetCore项目nginx发布
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @test注解_Spring 自定义注解你了解过吗?
  • [acm算法学习] 后缀数组SA
  • [C++]模板与STL简介
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】