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

SpringBoot使用redis作为缓存的实例

目录

什么是缓存?

 缓存的作用?

缓存的成本?

实际项目中的应用

 代码展示


什么是缓存?

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

 缓存的作用?

        降低后端负载

        提高读写效率,降低响应时间

缓存的成本?

        数据一致性成本(多了一份缓存中的数据)

        代码维护成本(代码复杂度上升)

        运维成本(会有缓存雪崩等一系列问题)

实际项目中的应用

举个栗子:下面的代码就是直接查询数据库的方法

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

 它的理论模型就应该是这样的

 如果接入了缓存之后的模型应该是这样的:

此时的业务逻辑如下图所示:

 

 代码展示

现在根据上面的逻辑自己定义一个方法引入缓存

 

  @GetMapping("/{id}")public Result queryShopById(@PathVariable("id") Long id) {return shopService.queryById(id);}
public interface IShopService extends IService<Shop> {Result queryById(Long id);
}
@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 jsonShop = stringRedisTemplate.opsForValue().get(key);//2.判断是否存在if (StrUtil.isNotBlank(jsonShop)) {//3.存在,直接返回Shop shop = JSONUtil.toBean(jsonShop, 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);}
}

 重新运行,进行测试,可以提前知道第一次查询是没有缓存中的数据的,走的是数据库,这次的响应时间为:

 此时redis中已经有了缓存数据

 

 再次请求:

 

http://www.lryc.cn/news/113497.html

相关文章:

  • vue3使用vue3-seamless-scroll插件
  • QT开发学习相关笔记
  • 拆分PDBQT文件并将其转换为PDB格式
  • Reinforcement Learning with Code 【Code 4. DQN】
  • Python3 高级教程 | Python3 正则表达式(一)
  • 奥威BI系统:零编程建模、开发报表,提升决策速度
  • 海康威视摄像头二次开发_云台控制_视频画面实时预览(基于Qt实现)
  • 单片机外部晶振故障后自动切换内部晶振——以STM32为例
  • Matlab实现决策树算法(附上多个完整仿真源码)
  • java中异步socket类的实现和源代码
  • ElasticSearch7.6入门学习笔记
  • 《面试1v1》ElasticSearch架构设计
  • tomcat和nginx的日志记录请求时间
  • 数据结构——红黑树基础(博文笔记)
  • 盘点帮助中心系统可以帮到我们什么呢?
  • Web3 solidity编写交易所合约 编写ETH和自定义代币存入逻辑 并带着大家手动测试
  • 概念解析 | 生成式与判别式模型在低级图像恢复与点云重建中的角力:一场较量与可能性探索
  • 【云原生】kubectl命令的详解
  • uniapp两个单页面之间进行传参
  • uniapp运行项目到iOS基座
  • HTTP——九、基于HTTP的功能追加协议
  • Redis 在电商秒杀场景中的应用
  • 大麦订单生成器 大麦一键生成订单
  • Java实现Google cloud storage 文件上传,Google oss
  • 适配器模式(AdapterPattern)
  • Apache Kafka Learning
  • 手把手教你用idea实现Java连接MySQL数据库
  • Ubuntu 22.04安装和使用ROS1可行吗
  • 83 | Python可视化篇 —— Bokeh数据可视化
  • 图像 检测 - RetinaNet: Focal Loss for Dense Object Detection (arXiv 2018)