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

打印 上一主题 下一主题

主题 760|帖子 760|积分 2290

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

redis常被用于作为后台数据库的缓存,缓存一些热点访问数据,根据局部性原理,缓存能够处理大部分请求。当请求数据未命中缓存时,才会引起对数据库的访问。
使用redis作为缓存时,存在一些应用问题,包括缓存穿透、缓存击穿、缓存雪崩。

缓存穿透

当有大量查询请求未命中缓存时,引起对后台数据库的频繁访问,导致数据库负载压力增大,这种现象就叫做缓存穿透。
引起的原因:

  • 黑客大量访问不存在的key,导致数据库处理大量请求
解决方法:

  • 将无效的key存进Redis中,若果数据库查询某个key不存在时,同样将这个key缓存到Redis缓存中,并设置value为NULL,表示不存在。如果攻击请求的key每次都相同,该方法有效;如果攻击请求的key每次随机生成,则同样会产生缓存穿透问题。
  • 使用布隆过滤器,过滤掉一些不存在的key。布隆过滤器判定为true时,key可能存在于数据库中,也可能不存在;判定为false时,key一定不存在于数据库。

缓存击穿

当Redis中存在某些极热点数据时,即有大量请求并发访问的key-value数据。当极热点key-value数据突然失效时,缓存未命中引起对后台数据库的频繁访问,这种现象叫缓存击穿。
引起的原因

  • 缓存上极热点数据突然失效
解决方法

  • 对极热点key设置永不过期
  • 使用互斥锁。如果缓存失效的情况,只有拿到锁才可以查询数据库,降低了在同一时刻访问数据库的请求量,防止数据库崩溃。缺点是会导致系统的性能变差。

缓存雪崩

当某⼀时刻发⽣⼤规模的缓存失效的情况,例如缓存服务宕机、大量key在同一时间过期,这样的后果就是⼤量的请求进来直接打到DB上,可能导致整个系统的崩溃,称为雪崩。如果运维重启宕机的数据库,马上又会有大量新的请求流量到来,再次引起数据库宕机。
可能的原因

  • redis宕机、重启
  • 大量数据使用了同一过期时间
解决方法

  • 引入随机性,在原有缓存失效时间上加上一个随机值,避免大量数据在同一时间失效。
  • 通过请求限流、熔断机制、服务降级等手段,降低服务器负载。
  • 实现缓存组件的高可用,防止单点故障、机器故障、机房宕机等一系列问题。
  • 提高数据后台数据库的容灾能力。

参考

十分钟彻底掌握缓存击穿、缓存穿透、缓存雪崩_mb5fdb099dd338a的技术博客_51CTO博客

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表