缓存雪崩

数据未加载到高速缓存中,或者高速缓存同时在较大区域中失效,这将导致所有请求都去查找数据库,从而导致数据库CPU和内存负载过高,甚至会出现宕机。

比如雪崩的一个简单过程:

1、redis集群大面积出现故障

2、缓存失效了,但是依旧会有大量的请求访问缓存服务redis

3、redis大量失效后,这个时候大量的请求转向到mysql数据库

4、mysql的调用量暴增了,一下子就扛不住了,甚至直接宕机

5、由于大量的应用服务依赖mysql和redis的服务,这个时候很快会演变成各服务器集群的雪崩,最后网站完全崩溃

如何预防缓存雪崩

1.缓存的高可用性

高速缓存层设计为高可用,以防止大面积的高速缓存故障。 即使是个别节点、个别机器甚至机房宕掉,仍然可以提供服务。 例如,Redis Sentinel和Redis Cluster已实现高可用性。

2.缓存降级

可以使用诸如ehcache(暂时支持)之类的本地缓存,但主要是限制对源服务的访问,资源隔离(熔断)和降级。 当流量高峰和服务出现问题时,仍然需要确保服务仍然可用。 系统可以根据一些关键数据自动降级,也可以配置开关实现人工降级,在这一块会涉及到运维的配合。

降级的最终目的是保证核心服务可用,即使是有损的。

比如推荐服务中,很多都是个性化的需求,假如个性化需求不能提供服务了,可以降级补充热点数据,不至于造成前端页面是个大空白。

例如,在推荐服务中,很多都是个性化的需求, 如果个性化需求无法提供服务了,那就可以降级和补充热门数据,这样子就不会造成前端页面出现空白页面。

在降级之前,需要对系统进行梳理,例如:哪些企业是核心(必须保证),哪些企业可以暂时忍受不提供服务(使用静态页面替换)等,以及配合服务器核心指标,来后设置整体预案,比如:

(1)一般:例如,某些服务可能由于网络抖动或服务正在上线而超时,这些服务可以自动降级;

(2)警告:某些服务的成功率会在一段时间(例如95到100%之间)之间波动,可以自动降级或手动降级并发送告警;

(3)错误:例如,如果可用性低于90%,或者数据库连接池被打爆了,或者访问数量突然增加到系统可以承受的最大阈值,则可以根据情况自动降级或手动降级;

(4)严重错误:比如因为特殊原因数据错误了,此时需要紧急人工降级。

3.Redis备份和快速预热

1)Redis数据备份和恢复

2)快速缓存预热

4.提前演练

最后,建议在项目上线之前,演练缓存层宕掉之后,应用程序和后端负载情况以及可能出现的问题,对高可用提前预演,并提前发现问题。

缓存穿透

缓存穿透是指查询不存在的数据。 例如:缓存中的redis未命中,您需要从mysql数据库中查询,如果找不到数据,则不会将其写入缓存中。 这将导致每次请求该不存在的数据都将查询到数据库,从而导致缓存穿透。

解决思路:

如果查询数据库也为空,则直接为缓存设置默认值,以便第二次从缓存中获取该值时,它将具有该值,就不会继续访问数据库。 设置一个过期时间或在有值时替换高速缓存中的值。

可以为key设置一些格式规则,然后在查询之前过滤掉不符合规则的key。

缓存并发

并发是指由多个Redis客户端同时set key引起的并发问题。 实际上,redis本身是一个单线程操作。 多个客户端同时运行,按照先到先执行的原则,先到的先执行,其余的阻塞。 当然,另一种解决方案是将redis.set操作放在队列中以对其进行序列化,该操作必须一个接一个地执行。

缓存预热

缓存预热是在系统上线后将相关的缓存数据直接加载到缓存系统中。

这样就可以避免在用户请求的时候,先查询数据库,然后在用户请求时缓存数据的问题! 用户直接查询预热的缓存数据!

解决思路:

1、直接写个缓存刷新页面,上线时手工操作一下;

2、数据量不大时,可以在项目启动的时候自动进行加载;

redis mysql 雪崩_Redis缓存雪崩、缓存穿透、并发等5大难题,你有没有解决方案相关推荐

  1. 高并发架构系列:如何解决Redis雪崩、穿透、并发等5大难题

    别人用手机刷新闻.刷段子,你用手机刷知识.你会的越多,成功率就越高. 本篇分享大型网站高并发架构设计是如何解决Redis雪崩.穿透.并发等5大难题的,以下,enjoy~ 缓存雪崩 数据未加载到缓存中, ...

  2. Redis系列教程(三):如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题

    Java相关的面试都会问到缓存的问题:史上最全Redis面试49题(含答案):哨兵+复制+事务+集群+持久化等,除此之外还会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等不常见的问题,但却是非 ...

  3. redis mysql 下载_redis 下载安装

    redis和mysql的区别? 我们都知道mysql是持久数据化存储,存储在磁盘当中的,会涉及到一些io,存储速度会较慢,这时候就出现了redis数据库,redis存储数据在内存当中,大幅度的提高了大 ...

  4. redis mysql 架构_redis+mysql架构搭建

    redis+mysql框架搭建 redis是一个key-value存储系统.和memcached类似,不过redis支持的value类型更多,主要有:string(字符串).list(链表).set( ...

  5. 缓存失效和命名是计算机科学两大难题,命名也是一种艺术

    为什么80%的码农都做不了架构师?>>>    我的命名风格是小写搭配下划线,一定要用拼音也是用全拼并用下划线分隔,比如余额(yu_e). 我习惯把操作对象(名词)放前面,操作(动词 ...

  6. 计算机科学两大难题,缓存失效和命名是计算机科学两大难题,命名也是一种艺术...

    我的命名风格是小写搭配下划线,一定要用拼音也是用全拼并用下划线分隔,比如余额(yu_e). 我习惯把操作对象(名词)放前面,操作(动词)放后面. 表结构: app_user_meta(user_id, ...

  7. redis rua解决库存问题_Redis锁完美解决高并发秒杀问题

    场景:一家网上商城做商品限量秒杀. 1 单机环境下的锁 将商品的数量存到Redis中.每个用户抢购前都需要到Redis中查询商品数量(代替mysql数据库.不考虑事务),如果商品数量大于0,则证明商品 ...

  8. 阿里技术文档:Redis+Spring全家桶+Dubbo精选+高性能+高并发

    最近花了很长的时间去搜罗整理Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档.今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方面的问题 ...

  9. redis 缓存预热_Redis异常问题解决方案:缓存雪崩、预热、穿透、击穿、降解方案分析...

    不管你在工作中还是面试中,Redis异常问题的解决方案都是不得不去学习了解的,下面来细品一下! 一.缓存雪崩 1.什么是缓存雪崩? 如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数 ...

最新文章

  1. 图论分析方法gretna_基于磁共振的多模态分析对血管性认知障碍患者脑网络的研究...
  2. win8 开发之旅(13) --webabcd大师,这事你怎么看? 向webabcd大师致敬。
  3. visual studio 2019、2017、2015下载网址
  4. Javascript学习总结 - JS基础系列 二
  5. Spring Boot MyBatis
  6. 新手如何创建Facebook广告账户?
  7. 【Java每日一题】20161019
  8. 计算机硬盘使用寿命,固态硬盘怎么测剩余寿命?SSD固态硬盘使用寿命检测方法...
  9. 常用の工具(update 22.11.11)
  10. window常用设置和命令
  11. 【去水印】最简单的百度图片去水印
  12. 抖音上热门涨粉的窍门总结出来了,4种方法那种适合你?
  13. python调用dll文件
  14. mysql 分组查询 语句_MySQL分组查询
  15. 正面管教读书笔记 09 家庭会议
  16. cba篮球暂停次数和时间_篮球比赛CBA中每节多长时间?每次暂停都分为多长
  17. plt.contour
  18. List、Map 与json转换的工具类
  19. 设计模式-备忘录模式(快照模式)
  20. 【Java专题】Java泛型集合详解

热门文章

  1. Linux主进程退出,主进程创建的线程会退出吗?
  2. rsync替换cp命令显示速度和进度
  3. 视频编解码(十四):机顶盒调试编解码器显示总结
  4. java多线程常用方法_Java多线程入门中几个常用的方法
  5. ubuntu 升级python_如何将 Ubuntu 16 和 18 上的 python 升级到最新 3.8 版
  6. python典型例题_经典动态规划例题整理(Python版)
  7. java io装饰类,Java IO 装饰类新说
  8. arcgis里面怎么截图_ArcGIS在变更调查中影像截图批量制作的统一方法
  9. 阿里巴巴2020首发136道Java高级岗面试题(含答案)
  10. easyui 的 toolbar配合图标使用