Redis-1 缓存穿透、缓存击穿、缓存雪崩

本文详细解释了缓存穿透、缓存击穿和缓存雪崩的概念,探讨了它们如何影响数据库性能,并提供了布隆过滤器、互斥锁、逻辑过期等解决方案,以及如何通过设置不同过期时间、使用Redis集群和降级限流策略来避免这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 缓存穿透

一.数据查询的流程

程序根据请求查询数据时,会先到redis中查询,如果redis中查到了目标数据,则直接返回;如果redis中没有目标数据,则到mysql中查找,找到目标数据后返回,同时将该数据写入到redis中。

二.什么是缓存穿透?

查询一个数据库中不存在的数据,由于数据库中没有该数据,因此也不会写入到redis中,导致每次请求该数据都要查询数据库。大量针对该数据的高并发请求可能会导致数据库挂掉。

三.如何解决缓存穿透?

方案一.缓存空数据

1.实施:对mysql中查询不到的数据,返回一个空值null,同时将该null值写入到redis中。

2.缺点:

(1)会消耗内存,无效数据一直占用内存;

(2)写入数据时可能会导致mysql与redis数据不一致的情况。

方案二.布隆过滤器

1.位图(bitmap):位图是一种以位(bit)为单位的数组,数组的每个单元只能存储二进制0或1

2.加了布隆过滤器后的查询流程:在对缓存进行预热时会先预热布隆过滤器,请求在查询redis前会先被布隆过滤器拦截,由布隆过滤器判断该数据是否存在,如果要查询的数据存在,则请求可以继续去查询redis;如果要查询的数据不存在,则直接返回。

3.布隆过滤器是通过位图来判断要查询的数据是否存在:

(1)对布隆过滤器进行预热时,会对每一个数据进行多个hash函数计算得到多个hash值,这些hash值作为数组的下标,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值