缓存穿透
缓存穿透:客户端请求的数据在缓存和数据库都不存在。这样缓存永远不会生效,这些请求都会打到数据库中。
解决方案
- 缓存空对象(常用)
优点:实现简单,维护方便
缺点:额外的内存消耗;可能造成短期的不一致(可以设置TTL时间,缓解不一致的情况)
- 布隆过滤器(常用)
优点:内存占用少,没用多余的key
缺点:实现复杂;存在误判可能性
- 增强id的复杂度,避免被猜测id规律
- 做好数据的基础格式校验
- 加强用户权限的限流
- 做好热点参数的限流
缓存雪崩
缓存雪崩:是指同一时间大量的缓存key失效或者redis服务宕机,导致大量请求到达数据库,带来巨大压力。
解决方案
- 给不同的key的TTL添加随机值
- 利用Redis集群提高服务的可用性
- 给缓存业务添加降级限流策略
- 给业务添加多级缓存
缓存击穿
缓存击穿:也叫做热点key问题,就是一个高并发访问并且缓存重建业务较复杂的key突然失效了,无数请求访问会在瞬间给数据库带到巨大压力。
解决方案
- 互斥锁
优点:没用额外的内存消耗;保证一致性;实现简单。
缺点:线程需要等待,性能收影响;可能有死锁的风险。
- 逻辑过期
优点:线程无需等待,性能较好。
缺点: 不保证一致性;有额外的内存消耗;实现复杂;
标签:缓存,数据库,redis,限流,内存,key,缺点,雪崩 From: https://blog.csdn.net/gs2516230558/article/details/142909200