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

缓存三剑客(穿透,雪崩,击穿)理解

缓存穿透

概念理解

缓存穿透正如其名穿透,说明访问的数据在缓存和数据库里都没用,而且此时还大量的发起了访问,导致数据库崩溃

解决方法

一、第一种解决方法就是保存空值在数据库里面,但是这种情况会很消耗空间

二、第二种办法就是使用布隆过滤器,当有数据来访问的时候,布隆过滤器检查一下如果缓存里没有,直接返回回去,此时布隆过滤器也有一定的弊处,假如我此时访问的数据是刚刚好过了我redis的过期时间,但是此时mysql里面还有数据,那不就可惜了吗?所以有一种方式叫缓存预热(缓存预热就是相当于我设置的数据过期时间是个假时间,什么意思呢?就是相当于我过期时间到了但是我不会将此时在缓存里的数据删除,而是将这个旧数据一直存储在缓存当中,当有数据访问这个缓存的时候,我先返回旧数据,再向数据库发请求获取新数据来更新,但是如果用了缓存预热这种技术的话就不能再使用惰性删除了)

缓存雪崩

概念理解

缓存雪崩,这个也如其名雪崩,为什么会雪崩呢?首先最先能想到的就是redis宕机了,缓存不管用了,大量数据打到了数据库上,还有什么原因呢?还有就是大量缓存失效了,同样会造成大量数据打到数据库上,造成数据库崩溃。那么应该如何解决呢?

解决方法

一、首先便是给每个缓存设置过期时间,避免大量缓存同时失效的情况

二、还能用分布式锁来做一个限制,当缓存失效之后,只允许一个请求进数据库来获取,其他的请求等待,这样的话不好的也就是会造成等待时间很长

缓存击穿

概念理解

对于缓存击穿而言,那就很简单了,他是击穿而不是穿透,说明了什么说明了他在数据库里有,也就说明此时是一个高频请求,怎么会造成这种影响呢?首先最应该想到的就是一个高频请求的缓存key失效了,导致所有的请求都打在数据库上

解决方法

一、此时能怎么解决呢?首先就是获取一个互斥锁,如果获取成功则直接从数据库中获取数据并更新缓存,避免其他请求同时访问数据库

二、其次就是设置热点key的ttl永不过期,或者使用缓存预热也可以。


http://www.mrgr.cn/news/12641.html

相关文章:

  • SparkShop开源商城 uploadFile 任意文件上传漏洞复现
  • 内存删除的原理
  • 常用开发工具配置笔记
  • UE5 Widget文件编译Bug
  • 喜讯!原点安全荣获北京市“专精特新”中小企业认定
  • 8.22
  • 并发式服务器
  • JavaWeb基础 -- SpringMVC
  • 机器学习——支持向量机
  • ubuntu /windows 安装COLMAP
  • spring security 自定义图形验证码(web/前后端分离)
  • PEFT qwen2 lora微调模型训练案例
  • 达梦到达梦(dm-dm)创建dblink,报错:dblink连接丢失
  • 当外接硬盘接入到macOS上,只读不可写时,应当格式化
  • 网络基础:理解 IP 地址与网段(网段是什么,网段与IP地址)
  • MyBatis使用递归查询来实现多级菜单的功能
  • 【代码随想录|二叉树part04之后】
  • 王立铭脑科学50讲:32,危险,如何应对恐惧和焦虑
  • Module not found: Can‘t resolve ‘tls‘/Module not found: Can‘t resolve ‘net‘
  • 【Linux】初步识操作系统