Redis学习之缓存穿透、缓存击穿和缓存雪崩详解
目录
- 缓存穿透
- 解决方案
- 缓存空对象
- 布隆过滤器
- 缓存击穿
- 解决方案
- 对访问数据库的操作加锁
- 提前缓存热点数据,设置热点数据永不过期
- 缓存雪崩
- 解决方案
- Redis高可用
- 限流降级
- 数据预热
- 设置合理的过期时间
- 参考
缓存穿透
指的是对某个一定不存在的数据进行请求,该请求将会穿透缓存到达数据库。
如:用户查询一个 id = -1 的商品信息,一般数据库 id 值都是从 1 开始自增,很明显这条信息是不在数据库中,当没有信息返回时,会一直向数据库查询,给当前数据库的造成很大的访问压力。
解决方案
缓存空对象
缓存空对象是指一个请求发送过来,如果此时缓存中和数据库都不存在这个请求所要查询的相关信息,那么数据库就会返回一个空对象,并将这个空对象和请求关联起来存到缓存中,当下次还是这个请求过来的时候,这时缓存就会命中,就直接从缓存中返回这个空对象,这样可以减少访问数据库的压力,提高当前数据库的访问性能。
缺点:可能会缓存大量空对象,浪费内存,可以通过设置过期时间解决布隆过滤器
缓存击穿
缓存击穿是指有某个经常被查询的key在缓存过期后或一个未被缓存的key,突然接受到大量有关这个key的访问请求,这样会导致大并发请求直接穿透缓存,请求数据库,瞬间对数据库的访问压力增大。
缓存击穿的原因:
- 一个“冷门”(未缓存)的key,突然被大量用户请求访问。
- 一个“热门”key,在缓存中时间恰好过期,这时有大量用户来进行访问。
解决方案
对访问数据库的操作加锁
当key要查询数据库的时候加上一把锁,这时只能让第一个请求进行查询数据库,然后把从数据库中查询到的值存储到缓存中,对于剩下的相同的key,可以直接从缓存中获取即可。
- 单机环境下:使用Lock、Synchronized 加锁
- 分布式环境下使用分布式锁,如:基于数据库、基于Redis或者zookeeper 的分布式锁。
提前缓存热点数据,设置热点数据永不过期
缓存雪崩
缓存雪崩是指在某一个时间段内,缓存集中过期失效,如果这个时间段内有大量请求,而查询数据量巨大,所有的请求都会达到存储层,存储层的调用量会暴增,引起数据库压力过大甚至宕机。
缓存雪崩的原因:
- Redis宕机
- 大量热点数据同时过期
解决方案
Redis高可用
搭建Redis集群(哨兵模式),减少Redis宕机的可能
限流降级
在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量,对某个key只允许一个线程查询数据和写缓存,其他线程等待。
数据预热
在正式部署之前,先把可能的数据先预先访问一遍,这样部分可能大量访问的数据就会加载到缓存中。在即将发生大并发访问前手动触发加载缓存不同的key。
设置合理的过期时间
参考
Redis的缓存了解吗?
Cyc2018
Redis学习之缓存穿透、缓存击穿和缓存雪崩详解相关推荐
- guava 缓存查询_阿里Java二面难点:Redis缓存穿透、击穿、缓存雪崩方案
一.缓存穿透 1. 什么是缓存穿透? 为了缓解持久层数据库的压力,在服务器和存储层之间添加了一层缓存: 一个简单的正常请求:当客户端发起请求时,服务器响应处理,会先从redis缓存层查询客户端需要的请 ...
- 缓存穿透与击穿问题解决方案
在互联网场景中缓存系统是一个重要系统,为了防止流量频繁访问数据库,一般会在数据库层前设置一道缓存层作为保护. 缓存是一个广义的概念,核心要义是将数据存放在离用户更近的地方,或者是将数据存放在访问更快的 ...
- Redis 缓存穿透、击穿、雪崩现象及解决方案
前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩 缓存穿透 关键词:穿过 Redis 和数据库 当 Redis 和数据库中都没有我们想要的数据时,就需要考虑缓存穿透的问题了.下面这段逻辑大家 ...
- Redis缓存穿透、击穿、雪崩、概念及解决办法
在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低 一.缓存穿透 1.缓存穿透理解 缓 ...
- Redis应用问题解决(缓存穿透、击穿、雪崩、分布式锁)
Redis应用问题解决(缓存穿透.击穿.雪崩.分布式锁) 缓存穿透 问题描述 当系统中引入redis缓存后,一个请求进来后,会先从redis缓存中查询,缓存有就直接返回,缓存中没有就去db中查询,db ...
- 什么是缓存穿透,击穿,雪崩,怎么解决?
缓存穿透:指在高并发场景下,如果某一个 key 被高并发访问,没有被命中,出于对容错性考虑,会尝试去从后端数据库中获取,从而导致了大量请求到达数据库,而当该 key 对应的数据库本身就是空的情况下,这 ...
- 分布式系统 缓存穿透与失效时的雪崩效应
缓存系统往往有两个问题须要面对和考虑:缓存穿透与失效时的雪崩效应. 1. 缓存穿透是指查询一个一定不存在的数据.因为缓存是不命中时被动写的,而且出于容错考虑.假设从存储层查不到数据则不写入缓存.这将导 ...
- redis缓存雪崩详解
缓存雪崩详解: 情景一:在没有缓存服务器的情况下,用户发起请求时,服务器直接向数据库请求数据,数据库直接返回数据给服务器. 情景二:当有redis缓存服务器时,用户发起请求时,服务器会先对redis ...
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)
大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...
- 三十七、缓存注解@Cacheable、@CacheEvict、@CachePut详解
# 缓存注解@Cacheable.@CacheEvict.@CachePut详解 ##一.@Cacheable用法详解 ###1.用在哪里? 用在方法或者类上. ###2.这两种 ...
最新文章
- Nature大调查显示 :全球1/4博士生想换导师
- 科学记数法数字转换/保留数值小数点位数(数字格式化)
- html 中embed标签使用
- 约数个数定理约数和定理
- android 功能防抖,一款简单的消息防抖框架
- 光纤光缆市场需求高于预期 我国将迎来流量经济
- python中mean的用法_Python statistics mean()用法及代码示例
- 后台传值给前台p标签
- 20181027 考试记录
- 两台linux建立GRE隧道
- 山东大学2022软件测试技术复习纲要
- android 模拟器优化,Android模拟器大幅优化 为开发者谋福利
- KVM虚拟化技术浅析
- javascript实现-右下角广告框效果
- Centos7 虚拟机迁移及扩容
- 我是如何获得微信内置表情的
- 如何区分前后端 BUG
- 联想服务器修改开机启动项,怎样在Win10系统里面手动设置开机启动项
- 瑞幸的野望,小鹿茶的突袭
- 3Dmark2006真让人郁闷!
热门文章
- Picture POJ - 1177(矩形周长并))
- [CQOI2015]选数(数论分块+杜教筛)
- YbtOJ#20235-[冲刺NOIP2020模拟赛Day9]公共序列【dp】
- P4047-[JSOI2010]部落划分【最小生成树】
- 【最短路】【SPFA】电车 (luogu 1346)
- [XSY3382] 专家系统(二分+线段树)
- 面试了 N 个候选人后,我总结出这份 Java 面试准备技巧
- 微服务配置中心实战:Spring + MyBatis + Druid + Nacos
- Java8 Striped64 和 LongAdder
- 百度分布式配置管理平台-Disconf