继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第11天 Redis学习

王开琦
关注TA
已关注
手记 36
粉丝 6
获赞 11

课程名称:Java架构师-技术专家
课程章节:第7周 集群架构:主从复制高可用Redis集群
主讲老师:慕课讲师团:Geely、风间影月、阿神……

课程内容:

1、 缓存穿透的解决方案

1.1、缓存穿透出现的原因及定义

比如:用户查询数据,缓存中没有数据,就会去数据库中查询,然后加入到缓存中,之后的请求就可以命中缓存了;但是如果用户在查询的时候,使用非法请求,每次查询到的都是数据库中没有的数据,这样数据就无法缓存到Redis中,相同的请求每次都会穿透 Redis 到达 db。

此时如果被非法用户攻击,大量的请求会直接打在 db 上,造成数据库压力过大甚至宕机,从而影响整个系统,这种现象称为缓存穿透。

这种缓存中不存在而需要去数据库查询的请求,就被称为是缓存穿透。

1.2、解决方案

不为空才放入缓存之后,这样可能会造成多次缓存穿透

解决方案一:不管是否为空,都将其放入缓存,比如空字符串、空对象、空数组或list。
为防止无效key过多占用存储,为这种类型的key 设置一个过期时间【5-10分钟】
为空的key设置过期时间,不为空的key 设置永久存在。就算这种key的值未来会有值了,set 方法是会去覆盖的。所以无需担心

解决方案二:布隆过滤器(内部维护二进制数组,存储 0/1)

相当于在Redis 前加了 一层过滤器,用户请求去查询数据,会在布隆过滤器设置该key 是否存在。

2、缓存雪崩

2.1、什么是雪崩

雪崩是成片缓存大面积失效

会给key 设置过期时间,一旦在某个时间点、时刻,大面积的 key 全部都失效了,但是在这个时候又恰恰有很大的流量涌入进来,那么所有的流量都会打在 db 上,所有的请求是不会经过 redis 的。
图片描述
对于雪崩来讲,完完全全解决是做不到的,只能够去缓解这一现象,提前去做防护的措施。

  • 永不过期
  • 过期时间错开
  • 多缓存结合
    图片描述
  • 采购第三方 Redis ,后期是可以升级的,健壮性和可靠性都较高。
    图片描述

学习收获:

对于缓存来说,我们还需要预防缓存穿透和雪崩,穿透的话一般来说只需要针对空值缓存就行,过期时间设置 5 -10 分钟,这样流量就不会打在数据库上导致死机宕机。

雪崩其实也可以做到提前预防,那就是用到过期时间的key,时间全部错开,此外,有些数据可以做永久保存的话那就直接永久保存,这样就不会造成大面积的key 失效了。

当一次请求过来,如果查询的 key 比较多,能做到批量就批量,如果是循环查询索引的话,一来吞吐量低,二来比较low。

今天的学习完毕!
图片描述
图片描述

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP