Redis击穿、雪崩、穿透场景描述与解决方案
1、击穿
(1)场景描述
缓存中的某个key由于过期了,并且前端数据出现高并发(一定要有高并发)请求该key(实际上概率很低),导致瞬间都打在数据库上。
(2)解决方案
使用redis的setnx(表示只有不存在时候才会设置值)命令,此时该命令相当于锁,如果设置成功则去DB查询,否则后续的请求都等待直到第一个请求设置成功直接缓存中get值。
解决步骤:
场景:10000个请求同时发生并请求Redis中不存在的key。
步骤一:10000个请求全部去Redis中查询数据,发现都没有值;
步骤二:10000个请求都去使用setnx方法去设置key,由于setnx特性(只有不存在才能设置成功),一定只要一个请求才会设置成功, 该请求去数据查询数据;
步骤三:其他请求setnx都会set失败,失败后睡眠一会,再重复步骤一。
(3)问题
1)如果第一个请求setnx去查数据时候恰巧挂了,那么后面的请求永远也等不到正确的设置值
解决:设置过期时间,如果第一个请求的应用挂了,后面的请求等待超时释放锁后,后面的请求去查库。
2)如果第一个应用没有挂,只是请求超时了?场景描述:此时第一个请求的锁已经释放,其他请求已经可以正常查询数据库获取数据,此时第一个请求成功了设置成功了,此时的效果是第一个已经取回来了数据,但是后面的请求还在等待查询数据库数据。
解决:使用多线程,一个线程去数据库查询数据,一个线程监控Redis中是否数据已经取回来了(也就是第一个请求查库是否正常查回数据)。
2、雪崩
(1)场景描述
缓存中由于大量的key同时过期(与击穿有点类似)导致大量访问数据库
(2)解决方案
两种情况:
a)针对时点性要求不高的数据,可直接讲redis的过期时间设置随机即可
b)针对有些数据必须在某个时点才能失效(比如有些数据必须在零点更新,数据再晚点就是脏数据)。
第一种简单方案:随机设置过期时间。
第二种方案:
- 可在业务层可零点延时判断,减少业务打在零点同时访问这个时间点,形成高并发;
- 击穿的解决方案。
3、穿透
(1)场景描述
查询的数据在预期范围之外(比如恶意攻击),则redis和数据库都没有数据,但是高并发下会影响数据库性能
(2)解决方案
(1)布隆过滤器;
使用方式:
- 客户端自己编写布隆算法自己设计位图;
- 客户端提供算法,Redis提供位图;
- 客户端什么都不实现,布隆算法与位图都放在Redis
(2)缺点,只能新增数据,不能删除数据,布谷鸟过滤器,或者直接维护一个空key集合,在空key里则直接返回。
Redis击穿、雪崩、穿透场景描述与解决方案相关推荐
- Redis—击穿、穿透、雪崩
一. 概念 redis击穿或者穿透有一个前置条件:一定是高并发的情况下才会发生. 一般系统的架构设计会在ngnix或者其他微服务设计下阻拦很多的并发量,但是难免访问到redis的并发量还是很多,此时才 ...
- Redis 击穿、穿透和雪崩的理解
前言 redis 是一个基于内存以键值对(key.value)存储的数据库,常用来做缓存的中间件,有几个常见的业务名词一起来了解一下 雪崩 场景:这真是一个很形象的概念,大家可以想象一下,打雪仗的雪球 ...
- redis击穿,穿透,雪崩以及解决方案
1 击穿: 指的是单个key在缓存中查不到,去数据库查询,这样如果数据量不大或者并发不大的话是没有什么问题的. 如果数据库数据量大并且是高并发的情况下那么就可能会造成数据库压力过大而崩溃 注意: 这里 ...
- Redis 击穿、穿透、雪崩产生原因以及解决思路
- 前言 - 大家都知道,计算机的瓶颈之一就是IO,为了解决内存与磁盘速度不匹配的问题,产生了缓存,将一些热点数据放在内存中,随用随取,降低连接到数据库的请求链接,避免数据库挂掉.需要注 ...
- redis击穿、雪崩、穿透解决方案
Redis击穿 redis缓存击穿是指某一个非常热点的key(即在客户端搜索的比较多的关键字)突然失效了,这时从客户端发送的大量的请求在redis里找不到这个key,就会去数据里找,最终导致数据库压力 ...
- Redis缓存知识-穿透、击穿、雪崩
目录 一.Redis介绍 二.Redis做缓存服务器 三.缓存穿透&击穿&雪崩 1.缓存穿透 2.缓存击穿 3.缓存雪崩 大家好,我是杨叔.每天进步一点点,关注我的微信公众号[程序员杨 ...
- 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透
前文回顾 建议前一篇文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 过期策略 Redis 的过期策略都有哪些? 在聊这个问题之前,一定 ...
- redis缓存雪崩、缓存击穿和缓存穿透还傻傻分不清?看这篇就够了
前言 关于Redis的高频问题,缓存雪崩.缓存击穿和缓存穿透一定少不了,相信大家在面试中都被问到过类似的问题.为什么这些问题一直热门呢?因为我们在使用Redis缓存时,这些问题都是很容易遇到的.接下来 ...
- Redis专题-缓存穿透、缓存雪崩、缓存击穿
一.缓存穿透 缓存穿透概念 缓存穿透是指查询一个一定不存在的数据,在数据库没有,自然在缓存中也不会有.导致用户查询的时候,在缓存中找不到对应key的value,每次都要去数据库再查询一遍,如果从存储层 ...
最新文章
- iOS 状态栏的图标
- python cookbook pdf下载-Python Cookbook 第3版 中文版.pdf
- linux下phpMyAdmin泛起1045 - Access denied for 的措置
- 如何使用TensorFlow对象检测API播放Quidditch
- Percona XtraBackup 安装介绍篇
- 关于我在安装2.6.9版本bochs虚拟机时遇到的问题以及解决过程
- python安装失败错误代码0x_详解雨林木风Win10提示“Python 0x80070643安装时发生严重错误”解决方法...
- WinRunner的工作流程
- 偏微分方程数值解法python_微分方程数值方法和偏微分方程有什么区别吗?
- .NET Framework 4 安装未成功 一般信任关系失败
- 3dmax2014卸载/安装失败/如何彻底卸载清除干净3dmax2014注册表和文件的方法
- 普瑞PS8742 Switch V0.9
- 螺旋矩阵(Java)
- [直流有刷电机步进电机]驱动芯片AS4950完美替代A4950/DRV8870/AT8870/TMI8870/G2057
- 运筹说 第57期 | 整数规划的分支定界法
- 怎么把图片拼接成长图,3招教你快速处理
- 现代化综治网格管理模式——织网工程
- java_关于线程常用操作及同步锁
- S5PV210_流水灯
- 和平精英android怎么写符号,和平精英可用符号有哪些?可用符号大全[视频][图]...
热门文章
- 疫情影响海外净利润?海尔智家的回答出人意料
- 人脸识别与膜虹识别_当人脸识别遭遇口罩,虹膜识别的机会来了
- centos7配置br0_centos7 bond 和 网桥配置
- mysql8集群的优点_介绍 MySQL 8 中值得关注的新特性和改进。
- html如何获得网址,已知一个网址,如何获得该网址对应的html源代码?在del 找人事管理软件...
- code iban 是有什么组成_「面试」new String(abc)和abc有什么区别?反编译看看原理吧...
- 安装gazebo_手把手教你用Gazebo仿真UUV水下机器人
- Python中字典get方法的使用
- Python基础教程— Struct模块
- python 面向对象教程:访问限制