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

目录

缓存穿透

定义:

解决方法:

缓存击穿

定义:

解决方案:

缓存雪崩

定义:

解决方案:

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


缓存穿透

定义:

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

解决方法:

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

缓存击穿

定义:

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

解决方案:

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

缓存雪崩

定义:

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

解决方案:

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

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

  • 缓存穿透:请求的数据在缓存中不存在。请求的数据在数据库中也不存在(例如非法请求或恶意攻击)。
  • 缓存击穿:某个热点数据的缓存过期了。在数据失效的瞬间,大量请求涌入,数据库无法承受。
  • 缓存雪崩:缓存中的大量数据在同一时间过期。缓存服务突然崩溃或失效,所有请求直接访问数据库。
相关推荐
八九燕来3 分钟前
django + drf 多表关联场景下的序列化器选型与实现逻辑
数据库·django·sqlite
一路向北⁢6 分钟前
短信登录安全防护方案(Spring Boot)
spring boot·redis·后端·安全·sms·短信登录
Mr. Cao code12 分钟前
MySQL数据卷实战:持久化存储秘籍
数据库·mysql·docker·容器
小北方城市网13 分钟前
微服务架构设计实战指南:从拆分到落地,构建高可用分布式系统
java·运维·数据库·分布式·python·微服务
爱喝水的鱼丶15 分钟前
SAP-ABAP:SAP性能侦探:STAD事务码的深度解析与应用实战
开发语言·数据库·学习·sap·abap
五阿哥永琪17 分钟前
MySQL相关的面试题 MySQL存储引擎与索引机制深度解析
数据库·mysql
Full Stack Developme20 分钟前
达梦(DM8)基于 LBS(位置服务)教程
服务器·网络·数据库
小湘西21 分钟前
数仓分层架构详解2:ODS、DWD、DWS
大数据·数据库·数据仓库
「、皓子~22 分钟前
AI创作系列35 海狸IM桌面版:本地数据库的设计艺术
数据库·golang·毕业设计·开源软件·im·社交软件