IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 再谈缓存雪崩、穿透、击穿 -> 正文阅读

[大数据]再谈缓存雪崩、穿透、击穿

一、雪崩

? 缓存雪崩在面试redis中经常会被问到,通常的回答会是缓存雪崩是因为大面积的缓存失效,打崩了DB。但这么说有点笼统,可以再详细的举例说说

1. 原因:

那么缓存雪崩的原因都可能有哪些?

  1. redis实例宕机

    redis实例宕机这点很好理解,就是redis挂了,本来会先访问redis获取数据,redis挂掉以后,无法从redis获取到数据了,流量都打到数据库上了,数据库承受不住如此大的流量,于是数据库也挂了。

  2. 大量数据同时失效

    大量数据同时失效,这点可能是属于人祸,一般情况想让大量数据同时失效也很难的,除非比如被人调用了flushall命令,这种情况我还真的见过,在原来公司的测试环境,就真的会有人连接公用的redis,然后调用flushall命令清除测试数据,结果把别人的测试数据也一块清除掉了。另外一种情况,是公司封装的redis工具包,自动设置key的超时时间为当天的12:00,到12点所有的key一块过期,够刺激吧,虽然这可能是业务需要,但是这种操作真的台危险了。

2. 解决

解决方案分为一下几个阶段:

  • 事前:

    • redis高可用,redis实例部署要有主从,非集群的实例,可以部署sentinel自动故障时切换主从,集群类型的实例天然是高可用的,在此基础上所有的集群的主实例都添加从实例就可以了。另外还有一些其他的部署规范,如:主从实例不能部署到同一台机器上等等。

    • 均摊分配redis key的失效时间,只要不要集中在一点就好,以几分钟的随机数让缓存错峰失效

  • 事中:应用程序集成限流和降级的功能,在redis崩溃或者数据大量失效的情况下降低访问或返回默认结果,避免DB被流量被打死。

  • 事后:使用redis持久化数据快速恢复缓存数据。RDB和AOF两种方式各有优势和缺点,AOF丢失的数据会是少一些。

二、穿透

1. 原因:

? 缓存穿透原因相应的比较简单,就是获取不存在的数据。正常情况下,接口从缓存中获取数据,如果获取不到,会从数据库中查询数据并设置到缓存中。但是这个数据如果在数据库中没有,那每次的获取就会一直从数据库中查询,缓存没有起到作用。流量大的话全部打到数据库上,就把数据库给打死了。

2. 解决:

? 这种情况一般的解决方案是在从数据库中获取不到值时,就在缓存中给对应的key设置一个自定义的值,比如我们公司是设置一个自定义的EmptyObject对象,下次获取值时,如果发现是EmptyObject对象的话,就返回null值,如果不是就查库,但是要注意一点,设置EmptyObject对象的Key应该设置一个较短有效期,这样,既可以防止频繁查询数据库造成穿透,又可以防止后续数据库中可以获取到值但从缓存中获取仍是null值的情况。

? 另外应该从接口方面限制参数规则验证,如果参数不符合规则直接抛异常,常见的如对外提供的接口,参数应该是大于0的,如果传入小于等于0的参数,则直接返回错误。

三、击穿

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

缓存击穿的解决方案一个是使用数据库的二级缓存,使用ehcache实现二级缓存高并发的流量不会都打到数据库上,另外就是使用限流工具,限制访问数据库的接口的流量。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:35:41  更:2022-09-21 00:36:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:57:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码