面试相关
Redis缓存三兄弟解决方案及实现
00 分钟
2024-11-23
2024-11-23
type
status
date
slug
summary
tags
category
icon

1. 缓存穿透

定义:缓存穿透是指查询一个不存在的数据,缓存中没有,数据库中也没有,导致每次请求都会直接打到数据库上。
解决方案
  • 布隆过滤器:使用布隆过滤器来判断数据是否存在,如果布隆过滤器返回不存在,则直接返回,不再查询数据库。
  • 缓存空值:将不存在的数据也缓存一段时间,避免频繁查询数据库。
使用布隆过滤器和缓存空值的结合方案:

2. 缓存击穿

定义:缓存击穿是指某个热点数据在缓存中过期的一瞬间,大量请求同时打到数据库上,造成数据库压力骤增。
解决方案
  • 加锁:在缓存失效后,通过加锁机制确保只有一个请求去查询数据库,并将结果写回缓存。
  • 设置随机过期时间:为缓存设置一个随机的过期时间,避免大量缓存在同一时间点过期。
使用加锁和随机过期时间的结合方案:

3. 缓存雪崩

定义:缓存雪崩是指大量缓存在同一时间点集体失效,导致大量请求直接打到数据库上,造成数据库压力剧增。
解决方案
  • 设置随机过期时间:为缓存设置一个随机的过期时间,避免大量缓存在同一时间点过期。
  • 限流:在请求到达时进行限流,避免过多请求同时打到数据库上。
  • 降级:在缓存和数据库都不可用时,返回默认值或降级处理。
使用随机过期时间和限流的结合方案:
上一篇
使用Redis生成全局唯一id
下一篇
redis数据类型详解