redis学习(009 实战:黑马点评:缓存穿透、缓存雪崩 、缓存击穿)

黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目

总时长 42:48:00 共175P

此文章包含第40p-第p45的内容


缓存穿透

解决方案

缓存空对象

在这里插入图片描述

布隆过滤

用hash算法存储二进制数据在布隆过滤器里
如果布隆过滤器里不存在数据库里一定不存在,
如果布隆过滤器里存在数据库里不一定存在
在这里插入图片描述

解决方案实现

在这里插入图片描述
空值的缓存时间短一点 两三分钟
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这里用shopJson != null不太容易理解 用 shopJson == “” 比较好
在这里插入图片描述

缓存穿透总结

在这里插入图片描述

缓存雪崩

解决方案

在这里插入图片描述


缓存击穿

在这里插入图片描述

解决方案

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对比
cep定理 在一致性和可用性中做选择
在这里插入图片描述

解决方案实现

在这里插入图片描述

setnx命令来实现互斥锁 只有key不存在的时候才能往里写数据
在这里插入图片描述

释放锁的时候直接删除就行 del key
在这里插入图片描述
ps:如果程序出问题了,无人再去释放这个锁了,就会产生死锁
可以设置一个有效期(如10秒)来兜底,否则可能会发生死锁问题 【有效期也不能太短(逻辑未执行完就释放了)】

互斥锁代码实现

在这里插入图片描述

加锁和释放锁代码↓
在这里插入图片描述

不要直接返回flag,容易返回null,会报空指针异常
return BooleanUtil.isTrue(flag); 相当于 return(flag != null)&& flag;
在这里插入图片描述
原来逻辑
在这里插入图片描述
在这里插入图片描述
新逻辑
在这里插入图片描述

这里使用了递归(ps:企业开发禁止写递归哦)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

模拟延时
在这里插入图片描述
使用jmeter进行并发测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

只触发了一次数据库查询
在这里插入图片描述

逻辑过期代码实现

在这里插入图片描述

两种方法 一种是将shop对象类继承RedisData
在这里插入图片描述

在这里插入图片描述

一种是组合
在这里插入图片描述
ps:组合(组合复用)优于继承,侵入性低

在这里插入图片描述

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

如果报空指针加上@RunWith(SpringRunner.class)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
注意:分布式可以复查,否则会有几率多次查数据库,这里就算多次重建也没影响啊,每个线程都要加锁就决定了并发量不会大。这又不像单例那样规定死了
doublecheck的意义:如果等待的线程缓存未命中,想要获取锁时,刚好缓存重建完毕,redis中已经有数据了,而且锁也被释放了,此时缓存未命中的线程就会获取到锁导致缓存再次重建

写个线程池
在这里插入图片描述
在这里插入图片描述

直接用之前的方法
在这里插入图片描述
这里测试使用20秒 实际最好设置30分钟
在这里插入图片描述
在这里插入图片描述
ps:这个锁的粒度加的有点大

这里的逻辑过期 是可以在过期之后进行重新加载 使用新的数据 ,这个值一直是存在于redis中的,只是过期之前可能使用的一直是旧数据

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 14:02:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 14:02:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 14:02:04       58 阅读
  4. Python语言-面向对象

    2024-07-13 14:02:04       69 阅读

热门阅读

  1. js实现一键任意html元素生成截图功能

    2024-07-13 14:02:04       19 阅读
  2. 一、字符串/数组

    2024-07-13 14:02:04       20 阅读
  3. 2024年城市客运安全员考试题库及答案

    2024-07-13 14:02:04       17 阅读
  4. SwiftBrush算法与代码解读

    2024-07-13 14:02:04       20 阅读
  5. 005-基于Sklearn的机器学习入门:逻辑回归

    2024-07-13 14:02:04       28 阅读
  6. opencv—常用函数学习_“干货“_总

    2024-07-13 14:02:04       22 阅读
  7. Web组成架构

    2024-07-13 14:02:04       23 阅读
  8. Artificial intelligence machine learning DATA4800

    2024-07-13 14:02:04       24 阅读