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

缓存穿透、缓存击穿与缓存雪崩

缓存穿透、缓存击穿与缓存雪崩

1.本质区别

缓存穿透指的是数据库不存在数据,导致无法缓存,每次查询都查数据库,数据库压垮

缓存击穿指的是缓存键值对key过期了,key过期期间,大量请求访问,不经过缓存,直接请求数据库,数据库压垮

缓存雪崩指的是key同时过期,请求不经缓存全部到数据库,数据库压垮

2.根据各自特点解决方案

缓存穿透

1.查询为null,将null缓存,key过期时间设置短一些,主要防止恶性攻击

2.redisson实现的布隆过滤器,底层bitmap,里面存的是二进制0和1,。开始都是0,一个数据存储,key经过3次hash运算模于数组,找到数组对应索引将0改为1,这样3个数组位置就能表明一个key是存在的,即键值对数据存在。但存在误判(C不存在,hash运算取模,1个值属于A,2个值数据B,A与B均存在,三个数组位置都是1,会误判C存在),概率不超过5%

缓存击穿

1.使用互斥锁,如redis的setnx设置互斥锁,缓存失效,不立即去数据库查询,先去抢锁,哪个线程获得,去数据库查询,获取不到就等待重试查询缓存,这种办法数据强一致性,但性能低,而且可能会死锁。

2.key设置逻辑过期非实际物理过期,设置key的时候,设计一个过期时间字段一起存入缓存中,而不给key设置过期时间。查询的时候,从redis中取出判断时间是否过期,如果过期开通另一线程进行数据同步,当前线程正常返回数据(返回的是旧数据),这种办法性能高,但是无法做到数据强一致性

缓存雪崩

解决方案将原有失效时间上随机加上随机值,比如1-5分钟随机,这样就不会同一时刻大量的key同时失效,缓存过期时间重复率降低

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

相关文章:

  • 一周学会Django5 Python Web开发-项目配置settings.py文件-模版配置
  • CF1845 D. Rating System [思维题+数形结合]
  • HeidiSQL安装配置(基于小皮面板(phpstudy))连接MySQL
  • 【蓝桥2013】错误票据
  • nvm对node版本进行管理及疑难解决,vue项目搭建与启动
  • Redisson分布式锁 原理 + 运用 记录
  • Spring Boot 笔记 021 项目部署
  • 新技术革命开始了,Sora一出,所有的视频人、电影人都下岗
  • 【FPGA开发】Modelsim和Vivado的使用
  • 现代浏览器对 es模块 【esm】原生支持
  • 修改SpringBoot中默认依赖版本
  • 网络安全最典型基础靶场-DVWA-本地搭建与初始化
  • 算法-----高精度2(高精度乘法,高精度除法,高精度斐波那锲数列)
  • windows vs 自己编译源码 leveldb 然后使用自己编译的文件
  • 基于GPT一键完成数据分析全流程的AI Agent: Streamline Analyst
  • C语言-----习题
  • Java学习笔记(五)
  • 4.【Linux】进程控制(进程终止||进程等待||程序替换)
  • 微服务设计:Spring Cloud 链路追踪概述
  • 【MySQL/Redis】如何实现缓存一致
  • Socket.D 开源输传协议 v2.4.0 发布
  • 单片机学习笔记---AT24C02数据存储
  • 首次安装Mysql数据库
  • 2024 前端面试题(GPT回答 + 示例代码 + 解释)No.1 - No.20
  • 通过`ssh`同步`tmux`剪贴板内容
  • HTTP 响应状态代码
  • [OPEN SQL] 新增数据
  • OpenHarmony—UIAbility组件生命周期
  • Mybatis的使用
  • Python 播放音乐