type
status
date
slug
summary
tags
category
icon
1. 缓存穿透
定义:缓存穿透是指查询一个不存在的数据,缓存中没有,数据库中也没有,导致每次请求都会直接打到数据库上。
解决方案:
- 布隆过滤器:使用布隆过滤器来判断数据是否存在,如果布隆过滤器返回不存在,则直接返回,不再查询数据库。
- 缓存空值:将不存在的数据也缓存一段时间,避免频繁查询数据库。
使用布隆过滤器和缓存空值的结合方案:
2. 缓存击穿
定义:缓存击穿是指某个热点数据在缓存中过期的一瞬间,大量请求同时打到数据库上,造成数据库压力骤增。
解决方案:
- 加锁:在缓存失效后,通过加锁机制确保只有一个请求去查询数据库,并将结果写回缓存。
- 设置随机过期时间:为缓存设置一个随机的过期时间,避免大量缓存在同一时间点过期。
使用加锁和随机过期时间的结合方案:
3. 缓存雪崩
定义:缓存雪崩是指大量缓存在同一时间点集体失效,导致大量请求直接打到数据库上,造成数据库压力剧增。
解决方案:
- 设置随机过期时间:为缓存设置一个随机的过期时间,避免大量缓存在同一时间点过期。
- 限流:在请求到达时进行限流,避免过多请求同时打到数据库上。
- 降级:在缓存和数据库都不可用时,返回默认值或降级处理。
使用随机过期时间和限流的结合方案:
- 作者:BOB
- 链接:https://hb2001.vercel.app/article/147678cd-7808-8005-9ca9-cc3a07af7792
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。