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

Redis(六)---缓存穿透/缓存雪崩/缓存击穿

作者头像
Autooooooo
发布2020-11-09 10:21:38
9270
发布2020-11-09 10:21:38
举报
文章被收录于专栏:Coxhuang

Redis(一)-----主从复制 : https://cloud.tencent.com/developer/article/1744810

Redis(二)-----数据分区 : https://cloud.tencent.com/developer/article/1744809

Redis(三)-----集群方案 : https://cloud.tencent.com/developer/article/1744811

Redis(四)-----持久化 : https://cloud.tencent.com/developer/article/1744791

Redis(五)-----应用场景 : https://cloud.tencent.com/developer/article/1744816

Redis(六)-----缓存穿透/缓存雪崩/缓存击穿 : https://cloud.tencent.com/developer/article/1744796

Redis(七)—淘汰删除策略 : https://cloud.tencent.com/developer/article/1744827

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

#1 什么是缓存穿透?如何避免??

缓存穿透:

缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。

。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。

  • 参数传入对象主键ID
  • 根据key从Redis中获取对象
  • 如果对象不为空,直接返回
  • 如果对象为空,进行数据库查询
  • 如果从数据库查询出的对象不为空,则放入缓存

如果传入一个在Redis和后端数据库都不存在的key,Redis和后端数据库都查找了一遍,且因为在后端数据库找不到,不会存到Redis中,那么,就导致一个恶意的请求,两个数据库都遍历一遍

如何避免?

  • 对后端数据库查询结果为空的情况也进行缓存,缓存时间设置短一点,比如设置为60秒。
  • 接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截

#2 什么是缓存雪崩?何如避免

缓存雪崩

当缓存服务器重启或者大量缓存集中在某一个时间段集中过期失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。

例子

  • 马上就要到双十一零点,很快就会迎来一波抢购,这波商品时间比较集中的放入了缓存,假设缓存一个小时。那么到了凌晨一点钟的时候,这批商品的缓存就都过期了。而对这批商品的访问查询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰。

如何避免?

  • 在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
  • 做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期
  • 不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
  • 如果缓存数据库是分布式部署,将热点数据均匀分布在不同的缓存数据库中。

3 什么是缓存击穿?何如避免

缓存击穿

缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

如何避免?

  • 设置热点数据永远不过期
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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