Redis基础—十、Redis缓存穿透与雪崩

Redis基础—十、Redis缓存穿透与雪崩

在我们工作当中,经常需要考虑高可用性的问题。这里我们稍微介绍一下缓存的穿透、击穿、雪崩。

一、缓存穿透

概念

按照正常的业务逻辑,假如说用户想要查询一个东西,redis缓存中没有,他就会去请求数据库。平常这样一个两个还好,但是当用户太多了,全都去访问持久层数据库了,这时候数据库就很有可能宕机了。这就叫缓存穿透。

image-20201105132544362

解决方案
布隆过滤器

关于布隆过滤器,大家可以去看这篇文章

https://www.cnblogs.com/cpselvis/p/6265825.html

布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,从而避免了对底层存储系统的查询压力﹔

image-20201105132801112

缓存空对象

当存储层不命中后,即使返回的空对象也将其缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,保护了后端数据源;

image-20201105132900180

但是这种方法不好的地方就很明显了,如果空的key过多就太消耗内存了。

二、缓存击穿

缓存击穿和缓存穿透又不太一样。

缓存一般都会有相关的到期时间,当某一个key的缓存已经到期了,同时这个key当前的热度又特别大(比如说双十一查看某一商品库存),而后台为其创建新的缓存又要花费一定的时间(可能有零点几秒的样子),在到期和创建好这段过程中,所有用户都将直接访问后台数据库,很容易导致缓存被击穿。

解决方案:

  1. 设置热点数据永远不过期。(费内存)
  2. 加互斥锁。在击穿时,只能允许一条数据访问数据库,剩下的等缓存。

三、缓存雪崩

描述:

缓存雪崩是缓存击穿的升级版。指缓存中数据大批量到过期时间(双十一设置商品到期时间为1小时,凌晨一点的时候都过期了),而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。

解决方案

  1. 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
  2. 如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
  3. 设置热点数据永远不过期。

redis结束咯!完结撒花!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值