黑马点评的总结和反思

1.缓存穿透

问题的体现

*下面就是我们的解决的方法(一旦查询到一次不存在的值,就往redis里面放入我们的空字符串这样下次访问无效的数据就可以使用redis来返回空字符串来防止数据库的损伤)

下面就是解决方案(直接给出最终的工具类因为工具类就可以通用了)

2.解决缓存击穿

问题的体现

解决思路

实现的思路

也是使用工具类的解决方法

首先我创建了一个类里面有我们一个新的字段就是逻辑过期的时间的设置RedisDate

// TODO 防止缓存击穿的线程池// TODO 成功 就开启一个线程(实现缓存重建)// 使用线程池来开启线程(10个线程)private static final ExecutorService CACHE_REBUILD_EXECUTOR =                                                                               Executors.newFixedThreadPool(10);
 /*** 这也是防止缓存击穿(设置的逻辑过期)** @param keyPrefix  表示前缀* @param id         表示我们要查询数据库的id* @param type       表示我们从redis中的得到的数据转为什么java对象* @param dbFallback 函数式方程* @param time       设置过期的时间* @param unit       设置过期的单位* @param <R>        这个就是我们的返回值* @param <ID>       这个就是我们id的类型* @return*/public <R, ID> R queryWithLogiclExpire(String keyPrefix, ID id, Class<R> type, Function<ID, R> dbFallback, Long                                                                 time, TimeUnit unit) {String key = keyPrefix + id;// 取redis中的缓存String jsonStr = stringRedisTemplate.opsForValue().get(key);// 进了这个判断就是没有命中if (StrUtil.isBlank(jsonStr)) {  //isNotBlank 不为空就是truereturn null;}// 命中需要json反序列化RedisData redisData = JSONUtil.toBean(jsonStr, RedisData.class);// 获取我们的数据// 得到我们的jsonObjectJSONObject data = (JSONObject) redisData.getData();// 得到我们json对象R r = JSONUtil.toBean(data, type);// 获取过期时间(逻辑过期时间)LocalDateTime expireTime = redisData.getExpireTime();// 再来判断是否过期(过期时间是不是在当前时间之后喃)if (expireTime.isAfter(LocalDateTime.now())) {// 没有过期直接返回return r;}// 如果已经过期 我们就要进行缓存重建String lockKey = LOCK_SHOP_KEY + id;// 获取互斥锁boolean isLock = tryLock(lockKey);// 判断获取锁是否成功if (isLock) {// TODO 成功 就开启一个线程(实现缓存重建)// 提交任务CACHE_REBUILD_EXECUTOR.submit(() -> {try {// TODO 重建缓存// 第一步查询数据库R r1 = dbFallback.apply(id);// 写入redis(并且使用的是逻辑过期)this.setWithLogiclExpire(key, r1, time, unit);} catch (Exception e) {throw new RuntimeException(e);} finally {// 重建缓存后就要释放锁unlock(lockKey);}});}// 不成功就返回当前的数据(也就是旧数据)// 返回return r;}

下面是我们利用锁(也是利用了redis的一个特性)

关闭锁当然也就很简单了

3.秒杀的一些处理(这个很重要就是处理我们的分布式)

黑马点评的总结(还在更新...)相关推荐

  1. springboot-redis-mysql-nginx项目:黑马点评开发(更新中)

    springboot-redis-mysql-nginx项目:黑马点评开发 开篇导读 亲爱的小伙伴们大家好,希望通过此博客,小伙伴们就能理解各种redis的使用啦. 短信登录 这一块我们会使用redi ...

  2. 黑马点评Redis实战(短信登录;商户查询缓存)

    黑马点评 通过一个类似于大众点评的项目了解学习redis在实战项目中的使用,下面是项目中会涉及到的模块: 一.导入黑马点评项目 导入springboot项目,导入sql脚本到数据库,开启nginx,更 ...

  3. 黑马点评:商户查询缓存

    文章目录 前言 缓存介绍 什么是缓存? 为什么要使用缓存? 如何使用缓存? 添加商户缓存 原始方法 缓存模型和思路 代码实现 缓存更新策略 数据库缓存不一致解决方案 数据库和缓存不一致采用什么方案 实 ...

  4. 黑马点评项目-短信登录功能

    一.导入黑马点评项目 1.代码下载 视频资源链接:P25 实战篇-02.短信登录-导入黑马点评项目 代码可以直接去黑马微信公众号上搜索,或者从下面的网盘链接中下载:链接: https://pan.ba ...

  5. 【Redis】Redis实战:黑马点评之优惠券秒杀

    Redis实战:黑马点评之优惠券秒杀 1 全局唯一ID 1.1全局唯一ID 每个店铺都可以发布优惠券: 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据 ...

  6. Redis学习笔记②实战篇_黑马点评项目

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

  7. 黑马点评项目全部功能实现及详细笔记--Redis练手项目

    目录 一.项目详情 1.1 项目简介 1.2 数据库表设计 1.3 前端部署 1.4 后端搭建 二.短信登录 2.1 发送验证码 2.2 验证码登录 2.3 登录校验拦截器 2.4 退出登录(补充) ...

  8. 个人项目总结-瑞吉外卖/传智健康/黑马点评

    1. 瑞吉外卖 瑞吉外卖技术栈:SpringBoot.MybatisPlus.springMVC 瑞吉外卖是我做的第一个项目,算是我做过所有的项目中最简单的,很适合新手入门,我当时是学完springb ...

  9. 黑马点评项目全面业务总结

    1 黑马点评项目 1.1 短信登陆 1.1.1 短信登陆简介 session共享问题:多台服务器并不共享session存储空间,当请求切换到不同tomcat服务时导致数据丢失的问题. 在进行短信登录时 ...

最新文章

  1. Go 学习笔记(62)— Go 中 switch 语句中的 switch 表达式和 case 表达式之间的关系
  2. 推荐一款IDE开发工具插件GitToolBox
  3. Chrome 插件开发-右键菜单开发实战演示,浏览器页面右键菜单选项设置,插件右键菜单点击插件名跳转主页设置
  4. SAP销售订单-订单组合
  5. boost::msm::mpl_graph::breadth_first_search相关的测试程序
  6. r语言怎么做经验分布_R语言如何做马尔科夫转换模型markov switching model
  7. 美国计算机科学专业申请要求,美国计算机科学专业申请条件
  8. 《程序员代码面试指南》第三章 二叉树问题 二叉树节点间的最大距离问题
  9. [arm驱动]linux内核时钟
  10. python基础编码规范_Python语言的基本语法和编码规范.doc
  11. 推荐算法为啥这么“灵”,又为啥会“失灵”?
  12. git本地安装配置与基础概念
  13. 【Flink】The class WC is an instance class, meaning it is not a member of a toplevel object
  14. 高薪诚聘项目经理,架构师,高级工程师,工程师,网页设计师
  15. mysql ,show slave status详解
  16. 程序设计语言编译原理-陈火旺(第三版)简答题复习
  17. 基于软件工程的Qt播放器探索(一) 概述
  18. 海蜘蛛软路由linux安装教程,软路由安装设置教程【详细步骤】-太平洋IT百科
  19. 暗影精灵5风扇怎么调_惠普HP暗影精灵5 Super游戏主机改装猫头鹰风扇攻略
  20. 和你播放器说“分手”吧

热门文章

  1. 数据处理包括哪些内容
  2. 杂谈:英雄联盟和魔兽
  3. 虚拟现实,房产精装间,使用MentalRay烘培,实现Unity3d·HDR版LightMap
  4. mac删除软件,软件已锁定无法删除
  5. #2021.5.20日亲测有效office 2019家庭与学生版安装OneNote 2016软件
  6. 中望3D2022草图
  7. win7系统怎么利用ubuntu17.10安装双系统,亲测成功
  8. appserv 64位 php5.6,appserv 64位
  9. CSS 引入和 Script 引入的方式
  10. C#前端decimal类型对应java后端BigDecimal类型