前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis-缓存穿透、缓存击穿和缓存雪崩

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

作者头像
唔仄lo咚锵
发布2020-09-15 15:10:40
7490
发布2020-09-15 15:10:40
举报
文章被收录于专栏:blog(为什么会重名,真的醉了)

文章目录

  • 缓存穿透
    • 解决方案
  • 缓存击穿
    • 解决方案
  • 缓存雪崩
    • 解决方案

缓存穿透


缓存穿透(查不到):查询一个数据时Redis内存数据库没有,缓存未命中,于是向持久层数据库查询发现也不存在,查询失败。当多次缓存未命中时,都去请求持久层数据库造成压力,若用此进行攻击可能压垮数据库。

解决方案

  1. 布隆过滤器 布隆过滤器是一种数据结构,对所有可能查询的参数以hash形式存储,先在控制层进行校验,不符合则丢弃,从而避免对持久层的查询压力。
  2. 缓存空对象 缓存未命中后,把返回的空对象写入缓存同时设置一个过期时间,之后再访问时就能直接从缓存读取,保护持久层,但会耗费内存资源。

缓存击穿


缓存击穿(查得到但量太大,或缓存过期):顾名思义就像子弹盯着一个点打最后在这个点把墙击穿一样,缓存击穿是缓存中可以查询到这个key,但高并发的持续查询这个key时,穿透了缓存直接请求到持久层数据库,瞬间压力而崩溃。比如热点数据过期的瞬间(60s),请求数据库回写缓存时(60.1s),这0.1s的大量请求瞬间压垮数据库,例微博热搜崩溃

解决方案

  1. 设置热点数据永不过期 没有过期时间便不会出现上述问题,但会占据内存。
  2. 加互斥锁 使用分布式锁,保证每个key同时只有一个线程去查询持久层数据库,其余线程没有分布式锁权限只能等待(即把击穿后的请求加锁等待)从而避免数据库压力,但对分布式锁有一定考验。

缓存雪崩


缓存雪崩:指某一个时间内,缓存集中过期失效、Redis宕机、服务器重启、断电断网等缓存不可用的情况(Redis缓存崩溃了雪崩了)。然后所有请求直接打到后端数据库上,然后你懂的。

解决方案

  1. Redis高可用 提高Redis高可用性,使用主从复制、集群等保证一台redis挂掉,其余几台仍可继续正常工作。
  2. 限流降级 在缓存失效后,通过加锁或队列来控制线程数量,比如每个key只允许一个线程读写,其余等待。
  3. 数据预热 在正式部署前,把可能访问的数据线预先访问一遍,把部分可能大量访问的数据加载到缓存中,设置不同过期时间,让缓存失效时间点均匀分散。避免用户请求的时候再去加载相关的数据。

原创不易,请勿转载本不富裕的访问量雪上加霜 ) 博主首页:https://blog.csdn.net/qq_45034708

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 缓存穿透
    • 解决方案
    • 缓存击穿
      • 解决方案
      • 缓存雪崩
        • 解决方案
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档