一、缓存击穿问题

对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。这个时候,需要考虑一个问题:缓存被“击穿”的问题,这个和缓存雪崩的区别在于这里针对某一key缓存,前者则是很多key。

解决方案:

1.加锁:在未命中缓存时,通过加锁避免大量请求访问数据库

2.不允许过期:物理不过期,也就是不设置过期时间。而是逻辑上定时在后台异步的更新数据。

3.采用二级缓存:L1缓存失效时间短,L2缓存失效时间长。请求优先从L1缓存获取数据,如果 未命中,则加锁,保证只有一个线程去数据库中读取数据然后再更新到L1和L2中。然后其他线 程依然在L2缓存获取数据。

二、缓存穿透问题

缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。

解决方案:

如果一个查询返回 的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

三、缓存雪崩

存雪崩是指在我们设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩。

解决方案:

1、缓存失效时的雪崩效应对底层系统的冲击非常可怕。大多数系统设计者考虑用加锁或者队列的方式保证缓存的单线程(进程)写,从而避免失效时大量的并发请求落到底层存储系统上。这里分享一个简单方案就时讲缓存失效时间分散开,比如我们可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

2、事前:这种方案就是在发生雪崩前对缓存集群实现高可用,如果是使用 Redis,可以使用主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃的情况。

3、事中:使用 Hystrix进行限流&降级 ,比如一秒来了5000个请求,我们可以设置假设只能有一秒2000个请求能通过这个组件,那么其他剩余的3000请求就会走限流逻辑。然后去调用我们自己开发的降级组件(降级),比如设置的一些默认值呀之类的。以此来保护最后的 MySQL 不会被大量的请求给打死。

4、事后:开启Redis持久化机制,尽快恢复缓存集群

如何应对redis缓存的击穿、穿透和雪崩相关推荐

  1. Redis入门到实战(实战篇)缓存更新、穿透、雪崩、击穿!

    Redis基础篇 Java面试宝典-redis 实战篇Redis 开篇导读 亲爱的小伙伴们大家好,马上咱们就开始实战篇的内容了,相信通过本章的学习,小伙伴们就能理解各种redis的使用啦,接下来咱们来 ...

  2. redis 缓存防止击穿

    灵魂拷问:缓存为何被击穿! 何为击穿? 为何被击穿! 生活案例:相信"富有"的各位有过双十一和618抢商品的经历吧? 就酸没学过程序都咳哟粗略的估计一下,上百万人和自己抢东西是有多 ...

  3. redis专题:redis缓存穿透、缓存击穿、缓存雪崩等问题如何解决?

    文章目录 1. 缓存穿透 1.1 缓存空对象 1.2 布隆过滤器 2. 缓存击穿(失效) 3. 缓存雪崩 在高并发项目中,redis作为热门中间件,在为项目带来便利性的同时,也存在一些隐患,比如缓存穿 ...

  4. Redis缓存击穿、雪崩、穿透!(超详细)

    缓存的击穿.穿透和雪崩应该是再熟悉不过的词了,也是面试常问的高频试题. 不过,对于这三大缓存的问题,有很多人背过了解决方案,却少有人能把思路给理清的. 而且,网络上仍然充斥着,大量不太靠谱的解决方案, ...

  5. Redis缓存知识-穿透、击穿、雪崩

    目录 一.Redis介绍 二.Redis做缓存服务器 三.缓存穿透&击穿&雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 大家好,我是杨叔.每天进步一点点,关注我的微信公众号[程序员杨 ...

  6. Redis缓存雪崩缓存击穿缓存穿透

    Redis缓存雪崩&缓存击穿&缓存穿透 一 缓存更新策略 二 缓存雪崩 三 缓存击穿 四 缓存穿透 一 缓存更新策略 目前redis缓存更新存在3种主流策略,分别是:内存淘汰.超时剔除 ...

  7. Redis缓存击穿,缓存穿透,缓存雪崩,附解决方案

    前言 在日常的项目中,缓存的使用场景是比较多的.缓存是分布式系统中的重要组件,主要解决在高并发.大数据场景下,热点数据访问的性能问题,提高性能的数据快速访问.本文以Redis作为缓存时,针对常见的缓存 ...

  8. redis缓存雪崩、缓存击穿和缓存穿透还傻傻分不清?看这篇就够了

    前言 关于Redis的高频问题,缓存雪崩.缓存击穿和缓存穿透一定少不了,相信大家在面试中都被问到过类似的问题.为什么这些问题一直热门呢?因为我们在使用Redis缓存时,这些问题都是很容易遇到的.接下来 ...

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

    Redis 缓存雪崩.击穿.穿透 文章目录 Redis 缓存雪崩.击穿.穿透 一.Redis基础 Redis基本数据类型.操作 二.面试相关问题 1.小伙子您好,看你简历上写了你项目里面用到了Redi ...

最新文章

  1. redis hash删除所有key_一文详解Redis面试中常见的5种数据结构及对应使用场景
  2. java查看文件夹下文件夹大小,java 获取文件夹大小,文件大小,文件个数
  3. delphi if多个条件_屡试不爽!使用策略模式代替多个if条件语句
  4. 阿里、京东高级算法专家讲述数学在企业中的应用
  5. 犹豫了几个月,我还是跳槽了....
  6. php与数据库如何连接,PHP中如何连接数据库
  7. adam算法效果差原因_信电学院本科生提出AI新算法:速度比肩Adam,性能媲美SGD,ICLR领域主席赞不绝口...
  8. 【阅读】《点石成金:访客至上的网页设计秘籍》读书笔记
  9. VIVO怎么创建计算机快捷方式,vivo手机快捷键怎么调出来
  10. 离职盗取代码、倒卖获利800万,北京西二旗程序员被逮捕
  11. Windows 下安装 tensorflow keras opencv 的避坑指南!
  12. WinForm实现只打开一个窗口的代码
  13. Java记录 -59- SortedSet
  14. RK3128功能介绍
  15. matlab 半方差分析,地统计学半方差分析几个名词含义说明
  16. GAEA Winsieve v1.2 1CD(快速输入和打印结晶粒度分析曲线)
  17. 11.Django中常用过滤器
  18. intel D435i 双目相机 拍摄图片并保存 python调用示例
  19. 五笔打字怎么学,负基础
  20. 生物素PEG生物素,Biotin-PEG-Biotin

热门文章

  1. 凡科小程序服务器域名,小程序支付申请及配置教程
  2. 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子
  3. My深度学习的总结记录
  4. 【linux】 下根目录,家目录区别
  5. Java输出100~999之间的水仙花数
  6. 传统人工智能中的三大问题
  7. Android谷歌推送
  8. 遇到押金不退,该怎么办?
  9. 光敏电阻简单应用——晚上灯亮,白天灯灭
  10. 互联网经典SQL面试题及答案解析