redis的雪崩与穿透原理的浅理解
首先列一下主要说什么,
1、什么是Redis缓存的雪崩?
2、什么是Redis缓存的穿透?
3、Redis缓存崩溃会怎么样?
4、怎么预防Redis缓存崩溃?
1、什么是Redis缓存的雪崩?
举个栗子:有系统A,每天高峰期每秒有5000个请求,缓存机抗4000,数据库最大阈值抗2000,本来系统缓存机可以抗住4000个请求,但是系统缓存机突然死翘翘宕机了,也就是缓存挂了。这个时候来的5000个请求全部砸到了数据库,远超数据库的可承受范围。数据库也可是傻眼了于是乎就业跟着挂了,系统本身也没有预制应急方案,没办法系统没有优质方案解决,重启数据库又不能有效解决,因为重启后又马上被干死了。当遇到这个场景的时候我就可以理解为缓存的雪崩。

2、缓存雪崩的解决发案
事前:Redis高可用,主从+哨兵。避免全盘崩溃。
哨兵的作用:
1、监控redis进行状态,包括master和slave
2、当master down机,能自动将slave切换成master
看到上边的作用,大概就知道怎么个原理了吧。可以配置多个或者一个主从。同时也可以配置多个哨兵。尽量做到有备份的效果。
缓存往往都设置有失效时间,在设置的时候需要注意避免大量缓存同时失效。可以设置缓存的有效期在某一个随机的有效期内,同时失效也在随机的一个有效期内。
具体的配置暂不说明,先把原理搞清楚了,在去实操巩固,实操部分后续补充。
事中:本地ehcache缓存+hystrix限流&降级。避免数据库被打死。
大致理解如下:系统接受到请求后先查本地ehcache再查Redis,如果都没有则再去查数据库,并同时将相关数据重新写入Redis和本地缓存中。避免下次再去请求时再访问数据库。
同时可以设置限流降级,当请求数大于系统所能够处理的请求数时,通过限流组件起到超出的部分走降级,不进行处理,确保系统核心功能一直处于可用状态。
事后:Redis做持久化处理,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。
2、什么是Redis缓存的穿透?
还是举个栗子:对于系统A,假设高峰期一秒有5000个请求需要处理,结果其中4000个请求是恶意攻击所发出的。那么这4000个请求在缓存中查不到并且数据中也查不到。比如数据库存储的数据ID范围是1~500 ,而实际查询完全不在这个范围内。这样就导致每次查询的命中率为0.。这种场景就可以被理解为缓存穿透。
对此应该怎么解决呢?可以采用一种简单的方式,每次系统A从数据库中要是没有查到就写一个空值到缓存,或者将查询进行标记,下次将接受的请求进行标记比对,最终要实现出现重复的或者没有空值均走缓存进行处理。
redis的雪崩与穿透原理的浅理解的更多相关文章
- 8.了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?
作者:中华石杉 面试题 了解什么是 redis 的雪崩.穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实这是问到缓存必问的,因为缓 ...
- Redis 缓存雪崩、穿透、击穿
缓存雪崩 定义: 同一时间所有 key 大面积失效,比如网站首页的数据基本上都是同一批次去缓存的. 解决方法: ① 存的时候设定随机的失效时间. ② 服务做熔断处理(异常或着慢查询 Hystrix 限 ...
- redis缓存雪崩、穿透、击穿概念及解决办法
缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机.缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据 ...
- 什么是redis的雪崩和穿透
缓存雪崩 如何应对缓存雪崩 首先要保证redis的高可用,可以使用redis cluster,开启redis持久化,redis之前要使用本地缓存,请求先走本地缓存,没找到再走redis 如果还是出现了 ...
- 【redis】redis的雪崩和穿透
1.什么是缓存穿透 一般的缓存系统,都是按照key值去缓存查询,如果不存在对应的value,就应该去DB中查找 .这个时候,如果请求的并发量很大,就会对后端的DB系统造成很大的压力.这就叫做缓存穿透. ...
- 什么是 redis 的雪崩、穿透和击穿?
缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机.缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据 ...
- 关于redis的几件小事(七)redis缓存雪崩与穿透
1.缓存雪崩 (1)什么是缓存雪崩 缓存雪崩指的是在同一时刻,缓存大量失效,导致大量的请求直接到了数据库,数据库压力剧增,引起系统崩溃.可能出现的情况有: ①大量的key设置了相同的过期时间,导致在缓 ...
- 面试系列19 redis的雪崩和穿透
缓存雪崩发生的现象 缓存雪崩的事前事中事后的解决方案 事前:redis高可用,主从+哨兵,redis cluster,避免全盘崩溃 事中:本地ehcache缓存 + hystrix限流&降级, ...
- Redis缓存雪崩和穿透的解决方法
转载自: https://blog.csdn.net/qq_35433716/article/details/86375506 如何解决缓存雪崩?如何解决缓存穿透?如何保证缓存与数据库双写时一致的问题 ...
随机推荐
- SpringMVC运行流程
Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherServl ...
- zipline-- 开发指南
Development Guidelines开发指南This page is intended for developers of Zipline, people who want to contri ...
- 转载:C++中堆和栈的区别
C++中堆和栈的区别,自由存储区.全局/静态存储区和常量存储区 文章来自一个论坛里的回帖,哪个论坛记不得了! 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和 ...
- 线程——自定义多线程task
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Arduino语法-变量和常量
变量的声明: int led=11 一般变量的声明方法为类型名+变量名+变量初始化值.变量名的写法约定为首字母小写 变量的作用范围又称为作用域,变量的作用范围与该变量在哪儿声明有关,大致分为如下两种: ...
- luogu P5303 [GXOI/GZOI2019]逼死强迫症
传送门 只有两行,考虑递推,设\(f_i\)为没有那两个\(1*1\)的,前\(i\)列的方案,可以发现一次可以放一个竖的或两个横的,也就是\(f_i=f_{i-1}+f_{i-2}\) 再设\(g_ ...
- Supervisor的安装以及使用
1.supervisor的介绍 Supervisor 是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统,通过配置可以实 ...
- 获取电脑系统唯一GUID
软件使用微软系统的唯一ID绑定指定电脑 class Program { static void Main(string[] args) { string sysId = ""; P ...
- java 中final关键字
1.final变量,一旦该变量被设定,就不可以再改变该变量的值. final关键字定义的变量必须声明时赋值.一旦一个对象引用被修饰为final后,它只能恒定指向一个对象,一个既是static和fina ...
- 推荐.Net、C# 逆向反编译四大工具利器
转自:https://blog.csdn.net/kongwei521/article/details/54927689 在项目开发过程中,估计也有人和我遇到过同样的经历:运行环境出现了重大Bug亟需 ...