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

Redis的缓存穿透、击穿、雪崩

目录

缓存穿透

定义:

解决方法:

缓存击穿

定义:

解决方案:

 缓存雪崩

定义:

解决方案:

 缓存穿透、缓存击穿和缓存雪崩的区别


缓存穿透

定义:

        查询一个不存在的数据,数据库未查询到数据,Redis也没有缓存这条数据,导致每次都访问数据库,从而导致数据库压力增加。

解决方法:

  • 布隆过滤器
    • 优点:可以快速判断一个元素是否在集合中,可以避免不必要的数据查询。
    • 缺点:布隆过滤器可能会认为某个元素存在,但是实际不存在,从而造成误判的情况。同时需要提前把数据标识添加到布隆过滤器中,并且不支持删除操作。 
  •  缓存空对象
    • 优点:在查询数据库时,如果数据不存在,就把空值(null)存入到缓存中。当再次查询时,将不会查询数据库。
    • 缺点:空对象会占用缓存空间,从而造成缓存浪费情况,同时需要处理数据空值问题。

缓存击穿

定义:

        当Redis中某一缓存失效时,多个请求同时访问该数据,Redis无法拦截,请求直接访问数据库,就会造成缓冲击穿。缓存击穿会造成数据库压力急剧增加。

解决方案:

  • 逻辑过期:热点数据不设置过期时间,在缓存数据中添加过期时间字段,当访问缓存数据时发现数据过期则更新数据。
    • 优点:具有高可用性,避免了数据库压力,同时不会因为数据更新阻塞用户请求
    • 缺点:数据更新期间缓存中存在过期数据,会影响一定的数据一致性。同时需要定时清理过期数据。
  • 分布式锁
    • 优点:通过加锁,保证同时只有一个线程访问数据库并进行缓存更新,后续线程会等待第一次线程更新完缓存后获取缓存数据。
    • 缺点:高并发时锁竞争激烈,影响性能。如果锁失效,会导致缓存击穿。

 缓存雪崩

定义:

         当Redis中大量数据同时过期,就会导致缓存雪崩,雪崩会导致数据库压力激增,从而造成系统性能下降,甚至造成崩溃。

解决方案:

  • 缓存过期时间设置成随机值
    • 优点:避免了大量缓存同时过期,操作简便,不需要复杂代码。
    • 缺点:数据缓存时间不同,可能会出现数据不一致问题,同时有极小概率数据还是会同时失效。
  • 使用多级缓存,如本地缓存加分布式缓存
    • 优点:可以提升缓存的命中率,从而减少直接访问数据库的机会。
    • 缺点:增加了系统的复杂度,需要同时管理多重缓存,同时需要额外的计算和储存资源。

 缓存穿透、缓存击穿和缓存雪崩的区别

  • 缓存穿透:请求的数据在缓存中不存在。请求的数据在数据库中也不存在(例如非法请求或恶意攻击)。
  • 缓存击穿:某个热点数据的缓存过期了。在数据失效的瞬间,大量请求涌入,数据库无法承受。
  • 缓存雪崩:缓存中的大量数据在同一时间过期。缓存服务突然崩溃或失效,所有请求直接访问数据库。
http://www.lryc.cn/news/427382.html

相关文章:

  • 【Django开发】前后端分离django美多商城项目第1篇:欢迎来到美多 项目主要页面介绍【附代码文档】
  • 【软件造价咨询】信息化项目预算评审看什么?
  • 第37讲:Cephfs文件系统的正确使用姿势
  • 单片机烧录
  • mysql实现分布式锁
  • MySQL快速使用
  • LeetCode41.缺失的第一个正数
  • ee trade:黄金投资与股票投资的区别
  • AI视频创作原理
  • idea vue项目删除node_modules时报文件损坏且无法读取,导致删除失败
  • Linux下编译安装-单机模式
  • RSSI定位算法
  • 布局管理(Layouts)-Qt-思维导图-学习笔记
  • 《区块链赋能游戏业:破解虚拟资产交易与确权难题》
  • 机器学习第十一章-特征选择与稀疏学习
  • C#中客户端直接引用服务端Proto文件
  • SiLM5932SHO系列SiLM5932SHOCG-DG 12A/12A强劲驱动电流能力 支持主动短路保护功能(ASC)单通道隔离门极驱动器
  • 本地项目上传github
  • 使用zip包来安装mysql
  • 嵌入式面经篇十——驱动开发
  • MySQL(四)——常用函数
  • C++ //练习 17.38 扩展上一题中你的程序,将读入的每个单词打印到它所在的行。
  • NC 丑数
  • Spring Boot 整合 Spring AI 实现项目接入ChatGPT(OpenAl的调用)
  • react中 useContext 和useReducer的使用
  • Android:动态更新app启动图标和应用名
  • 深入探讨 ElementUI 动态渲染 el-table
  • 数据炼金术:用Python爬虫精炼信息
  • C++第三十八弹---一万六千字使用红黑树封装set和map
  • ★ C++基础篇 ★ vector 类