110. Python语言 的 项目前导(上) 之 Redis 第十一章 :Redis 的 缓存雪崩 & 缓存穿透

56 篇文章 0 订阅
15 篇文章 0 订阅

本章主题

  

关键词

  

缓存雪崩

  缓存雪崩是指在短时间内,有大量缓存同时过期,导致大量的请求直接查询数据库,从而对数据库造成了巨大的压力,严重情况下可能会导致数据库宕机的情况叫做缓存雪崩。

  我们先来看下正常情况下和缓存雪崩时程序的执行流程图,正常情况下系统的执行流程如下图所示:

在这里插入图片描述

  缓存雪崩 的执行流程,如下图所示:

在这里插入图片描述

  缓存雪崩的常用解决方案有以下几个。

  

随机化过期时间

  为了避免缓存同时过期,可在设置缓存时添加随机时间,这样就可以极大的避免大量的缓存同时失效。

  

加锁排队

  加锁排队可以起到缓冲的作用,防止大量的请求同时操作数据库,但它的缺点是增加了系统的响应时间,降低了系统的吞吐量,牺牲了一部分用户体验。

  

缓存穿透

  缓存穿透 是指查询数据库和缓存都无数据,因为数据库查询无数据,出于容错考虑,不会将结果保存到缓存中,因此每次请求都会去查询数据库,这种情况就叫做缓存穿透。

  缓存穿透 执行流程如下图所示:

在这里插入图片描述

  其中红色路径表示缓存穿透的执行路径,可以看出缓存穿透会给数据库造成很大的压力。

  缓存穿透的解决方案有以下几个。

  

使用过滤器

  我们可以使用过滤器来减少对数据库的请求,例如使用我们前面所学的布隆过滤器。

  

缓存空结果

  另一种方式是我们可以把每次从数据库查询的数据都保存到缓存中,为了提高前台用户的使用体验 (解决长时间内查询不到任何信息的情况),我们可以将空结果的缓存时间设置得短一些,例如 3~5 分钟。

  

总结小便条

本篇文章主要讲了以下几点内容:

  

  本章回顾暂时就到这了,如果还有点晕,那就把文章里所有引用的案例代码再敲几遍吧。拜拜~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值