缓存穿透、击穿、雪崩 xiaojiuaigc@163.com 发布于 2024-10-31 350 次阅读 缓存穿透 缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库 解决方案:解决方案(一)缓存空数据,查询的数据为空,吧这个空结果放到缓存里面去优点:简单缺点:消耗内存可能会发生数据不一致的问题解决方案(二)布隆过滤器:用于检索一个元素是否在一个集合中 这是测试文本,单击 “编辑” 按钮更改此文本。 缓存击穿 缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮 解决方案1互斥锁(性能较差,需要强一致性时使用) 解决方案2:逻辑过期(性能较优,高可用) 缓存雪崩 缓存雪崩是指在同一时间段有大量的缓存key同时失效或者Redis服务宕机,导致大量的请求到达数据库,带来巨大压力 解决方案:给不同的Key的TTL添加随机值利用Redis集群提高服务的可用性(哨兵、集群模式)给缓存业务添加降级限流策略(nginx/spring cloud gateway)(可以作为系统的保底解决策略适用于穿透、击穿、雪崩)给业务添加多级缓存(Guava或者Caffein) 助记诗:《缓存三兄弟》穿透无中生有key,布隆过滤null隔离。缓存击穿过期key,锁与非期解难题。雪崩大量过期key,过期时间要随机。面试必考三兄弟,可用限流来保底。
Comments NOTHING