Redis教程(十六):Redis的缓存穿透、缓存击穿、缓存雪崩

缓存穿透

描述

用户需要查询一个数据,例如要查一张ASSET_CODE = '999999'的卡片,查询redis中没有,就直接去请求数据库,数据库中也不存在对应的数据,返回空或错误,当很多用户同时请求并且都没有命中!于是都去请求了持久层的数据库,那么这样会给持久层数据库带来非常大的压力。当高并发或有人利用不存在的Key频繁攻击时,数据库的压力骤增,甚至崩溃,这就是缓存穿透问题。
*

解决方案

  1. 合法请求校验

  2. 缓存空对象

  3. 布隆过滤器

  4. 用户黑名单

缓存击穿

描述

生产上有一个非常热点的key,在不停的扛着大并发,当这个key失效时,一瞬间大量的请求冲到持久层的数据库中,就像在一堵墙上某个点凿开了一个洞!
*

解决方案

  1. 设置热点key永不过期

  2. 加互斥锁,同一时间只有一个线程能访问数据库查询这个key,查到了更新到缓存里,剩下的线程可以正常查询Redis缓存

缓存雪崩

描述

在某一个时间段,Redsi缓存的key大量集中同时过期失效了,所有的请求全部冲到持久层数据库上,导致持久层数据库挂掉!
*

解决方案

  1. 搭建redis集群

  2. 加互斥锁,同一时间只有一个线程能访问数据库查询这个key,查到了更新到缓存里,剩下的线程可以正常查询Redis缓存

  3. 设置不同的过期时间,让缓存失效的时间点尽量均匀

相关推荐
stark张宇30 分钟前
库存扣减的“锁”事:悲观锁、乐观锁、分布式锁
redis·分布式·mysql
Vegetable_xu31 分钟前
Spring Bean 循环依赖:为什么有时能过、有时启动就挂
java·spring·mybatis
AAASilverwolf1 小时前
OpenAI 新增 12 小时提示缓存:跨小时任务能省多少?
人工智能·gpt·缓存·api
Sayuanni%35 小时前
Redis(初阶)
数据库·redis·缓存
未秃头的程序猿5 小时前
一次重复扣款的复盘:分布式锁加错了维度,比不加锁更危险
java·redis·后端
m0_639906945 小时前
MyBatis 核心体系:核心接口、动态 SQL 原理、插件底层机制
java·sql·mybatis
XiYang-DING6 小时前
P5528.带过期时间的 LRU 缓存
java·开发语言·缓存
2301_7779983411 小时前
ARP协议进阶:ARP缓存、RARP与ARP欺骗原理解析
linux·服务器·网络·网络协议·缓存
hweiyu0021 小时前
Redis命令:LLEN
redis·缓存
用户094248568031 天前
第3章:Redis字符串 String 实战:验证码、计数器与分布式开关
redis·源码