缓存穿透
缓存穿透:查询一个不存在的数据,在mysql数据库中查询不到数据也不会写入缓存,导致每次请求都查询数据库,增加数据库负载。
解决办法:
1、缓存空值:将数据库中不存在的结果(例如空值)也缓存起来,并设置一个较短的过期时间,避免频繁查询数据库
2、使用布隆过滤器:使用布隆过滤器来快速判断一个请求的数据是否存在,如果布隆过滤器判断数据不存在,则直接返回,避免查询数据库。
- 布隆过滤器原理:


3、防止非法请求:检查非法请求,封禁其IP以及账号
缓存击穿
缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好对这个key有大量的请求过来,这些并发的请求可能会瞬间把DB压垮
解决办法:
1)加互斥锁:保证同一时间只有一个请求来构建缓存,跟缓存雪崩相同。
2)热点数据永不过期:不要给热点数据设置过期时间,在后台异步更新缓存
缓存雪崩
缓存雪崩是指在某个时间点,大量缓存同时失效或被清空,导致大量请求到达数据库或后端系统,造成系统负载激增,甚至引发系统崩溃,这通常是由于缓存中的大量数据在同一时间失效引起的。
解决办法:
1、设置过期时间随机化:设置缓存的过期时间,加上一个随机值,避免同一时间大量缓存失效。
2、使用多级缓存:引入多级缓存,如Guava或Caffeine作为一级缓存,redis作为二级缓存。
3、构建集群:构建多个 Redis 集群提高服务的可用性


![火源类型检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]](https://i-blog.csdnimg.cn/direct/6a5693b8d2104029863455b0d63c7a96.png#pic_center)











![[论文笔记] LLM-ICL论文:AI模型对prompt格式分隔符的敏感性——结构化Prompt格式](https://i-blog.csdnimg.cn/direct/c9303ad01790475bbedae26b4c2a3a5f.png)




