什么是缓存穿透,缓存击穿和缓存雪崩?

1 篇文章 0 订阅

1.缓存穿透(Cache penetration)

什么是缓存穿透

数据库与缓存中都无此值,请求穿过缓存,访问数据库,导致数据库压力过大

解决方案:

  • 缓存空值,并设置过期时间小一点,不然会对数据的准确性造成影响
  • 对用户请求进行合法校验
  • 布隆过滤器

2.缓存击穿(Cache breakdown)

什么是缓存击穿?

缓存击穿是一种场景,当缓存的数据过期,同时对过期的数据进行大量请求,这突然导致搜索直接命中数据库,并极大地增加了数据库层的负载。这将在高并发环境中发生。

解决方案:

通常,在这种情况下,需要对搜索到的键进行锁定,以便其他线程在某些线程试图搜索键并更新缓存时需要等待。在更新缓存并释放锁之后,其他线程将能够读取新缓存的数据。
另一种可行的方法是通过工作线程异步更新缓存的数据,以使热数据永不过期。

3.缓存雪崩(Cache avalanche)

什么是缓存雪崩?

缓存雪崩是一种场景,大量缓存的数据同时到期或缓存服务关闭,并且突然之间所有对这些数据的搜索都将冲击数据库并给数据库层造成高负载并影响性能。

解决方案:

  • 使用集群来确保缓存服务器实例在任何时间都处于服务状态。如果使用Redis,则可以具有Redis集群。
  • 可以配置其他一些方法,例如Hystrix断路器和速率限制,以便基础系统仍可以为流量提供服务并避免高负载
    可以调整不同按键的到期时间,以使它们不会同时到期。
  • 所有缓解方法都需要根据实际用例和系统设计要求来实施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员鱼丸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值