八股训练营第 22 天 | 介绍一下Redis缓存雪崩、缓存穿透、缓存击穿,如何解决这些问题?如何保证数据库和缓存的一致性?

介绍一下Redis缓存雪崩、缓存穿透、缓存击穿,如何解决这些问题?

缓存雪崩:大量 Key 在同一时间失效,导致大量请求达到数据库上对数据库造成影响。

解决方案:

  • 给每个 Key 设置不同的随机的 ddl。
  • 不设置过期时间,改为定期更新缓存。

缓存穿透:访问缓存和数据库都不存在的数据。常见于黑客构造不存在的 id 进行攻击。

解决方案:

  • 缓存空值:如果数据在缓存和数据库中都不存在,就在缓存中存入一个空值,下次直接返回这个空值。
  • 布隆过滤器:在 Redis 前面加一个布隆过滤器。对于不存在的数据会直接返回。

缓存击穿:数据在缓存中不存在,在数据库中存在。常见于某个热点 Key 突然过期,导致大量请求打到数据库上。

解决方案:

  • 使用互斥锁(分布式锁)。
  • 设置逻辑过期字段。

如何保证数据库和缓存的一致性?

使用 Cache Aside(旁路缓存)这种策略,它可以分为读策略和写策略。

  • 读策略:查询数据时,先查询缓存,缓存有则直接返回数据。缓存没有,则到数据库中查,返回数据的同时在缓存中存入数据。
  • 写策略:更新数据时,先更新数据库,再删除缓存。

这种做法能大概率避免并发安全问题,最大限度地保证数据库和缓存的一致性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值