当前位置: 首页 > news >正文

redis击穿,穿透,雪崩以及解决方案

目录

击穿

解决方案一

解决方案二

穿透

解决方案

雪崩

解决方案


击穿

指的是单个key在缓存中查不到,去数据库查询,这样如果并发不大或者数据库数据量不大的话是没有什么问题的。

如果数据库数据量大并且是高并发的情况下那么就可能会造成数据库压力过大而崩溃。

注意: 这里指的是单个key发生高并发。

解决方案一

通过synchronized+双重检查机制:某个key只让一个线程查询,阻塞其它线程。

在同步块中,再次判断检查,保证不存在,才去查DB。

private static final Object lock = new Object();public String getValue(String key) {// 先查 redis 中是否有数据String value = redis.get(key);// 如果 redis 中没有数据,使用 synchronized 进行加锁if (StringUtils.isBlank(value)) {synchronized (lock) {// 再次查询 redis 中是否有数据,因为第二个线程拿到锁进来的时候value也为空,而此时第一个线程已经写入值了value = redis.get(key);// 如果第还是没有数据,此时再查数据库if (StringUtils.isBlank(value)) {value = db.query(key);// 查询到数据库中的数据后,将数据写入到 redis 中redis.set(key, value, 1000);}}}return value;}

缺点: 会阻塞其它线程。

解决方案二

设置value永不过期。

这种方式可以说是最可靠的,最安全的但是占空间,内存消耗大。

穿透

一般是出现这种情况是因为恶意频繁查询才会对系统造成很大的问题,key缓存不存在并且数据库中也不存在,所以每次查询都会查询数据库从而导致数据库崩溃。

解决方案

使用布隆过滤器,它的作⽤就是如果它认为⼀个key不存在,那么这个key就肯定不存在,所以可以在缓存之前加⼀层布隆过滤器来拦截不存在的key。

雪崩

雪崩指的是多个key查询并且出现高并发,缓存中失效或者查不到,然后都去db查询,从而导致db压力突然飙升,从而崩溃。

出现原因:
1)key同时失效

2)redis本身崩溃了

解决方案

1、在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。(跟击穿的第一个方案类似,但是这样是避免不了其它key去查数据库,只能减少查询的次数)。
2、可以通过缓存reload机制,预先去更新缓存,再即将发生大并发访问前手动触发加载缓存。
3、不同的key,设置不同的过期时间,具体值可以根据业务决定,让缓存失效的时间点尽量均匀。
4、做二级缓存,或者双缓存策略。A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。(这种方式复杂点)。

http://www.lryc.cn/news/500397.html

相关文章:

  • 时频转换 | Matlab格拉姆角和场Gramian angular summation field一维数据转二维图像方法
  • qt QCryptographicHash详解
  • 亚马逊云科技大语言模型加速OCR应用场景发展
  • 什么是分库?分表?分库分表?
  • QT 中 sqlite 数据库使用
  • 不一样的CSS(4)--icon图标系列之svg
  • Level DB --- Cache
  • 学在西电录播课使用python下载,通过解析m3u8协议、多线程下载ts视频块以及ffmpeg合并
  • Springboot3介绍
  • Oracle 11G DataGuard GAP 修复过程(通过主库scn增备恢复)
  • WLAN AutoConfig服务假死?重启服务恢复网络连接!
  • 【linux】(30)shell-条件判断
  • docker安装启动问题解决排查
  • 《MySQL 查询进阶:复杂查询语句的魅力》
  • OpenHarmony-3.HDF框架(2)
  • 人大金仓(KingBaseEs)数据库操作手册
  • Flink+Paimon实时数据湖仓实践分享
  • w~深度学习~合集1
  • KVM 虚拟化
  • MONI后台管理系统-数据库设计
  • Rigol DP711自动控制--SCPI命令
  • 总结FastDFS的面试题
  • Fiddler 5.21.0 使用指南:过滤浏览器HTTP(S)流量下(四)
  • 【踩坑】pip安装依赖卡在Installing build dependencies ...
  • 【WRF-Urban】SLUCM新增空间分布城市冠层参数及人为热排放AHF代码详解(下)
  • 云桌面:云计算桌面
  • WPF+LibVLC开发播放器-音量控制和倍速控制
  • 数智运营一体化平台项目经营分享
  • 记录blender学习过程中遇到的问题
  • (八)腾讯cloudstudio+Stable-Diffusion-webui AI绘画教程-安装插件