缓存穿透?
指在客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,并都打到数据库中
解决方案
-
缓存空对象
-
优点:实现简单,维护方便
-
缺点:额外的内存消耗。可能造成短期不一致
-
-
布隆过滤
-
优点:内存占用少。没有多余的key
-
缺点:实现复杂,存在误判可能
-
其他方案:
增强id复杂度,避免被猜测id规律
做好数据的基础格式校验
加强用户权限校验
做好热点参数的限流
缓存雪崩?
在同一时段大量的缓存key同时失效,或者redis服务宕机,导致大量请求到达数据库,带来巨大压力
解决::
-
给不同的key的TTL加随机值
-
利用redis集群提高服务的可用性
-
给缓存业务添加降级限流策略
-
给业务添加多级缓存
缓存击穿?
缓存击穿也叫热点key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击
解决方案::
-
互斥锁
-
逻辑过期