缓存穿透
什么是缓存穿透?
是指客户端请求的数据在缓存中和数据库中都找不到,不存在,这样缓存永远不会生效,这些请求都会全部打到数据库。不断发起这样的请求,就会给数据库带来巨大压力。
解决缓存穿透的方法有哪些呢?
1.缓存null值
2.布隆过滤
3.加强用户权限校验
4.做好数据的基础格式校验
5.做好热点参数的限流
6.增强id的复杂度,可以避免被猜测id的规律
常见解决缓存穿透的两种方法:
1.缓存空对象:
优点:维护方便,实现简单。
缺点:占用额外的内存消耗、还有可能造成短期数据的不一致。
2.布隆过滤:
优点:内存占用较少,不会存在多余的key 。
缺点:存在误判的可能;实现复杂。
缓存击穿
什么是缓存击穿?
缓存击穿也叫热点Key的问题,就是当一个被高并发访问而且缓存重建业务较复杂的key突然失效了,大量的请求访问会在瞬间给数据库带来巨大的冲击。
常见解决缓存穿透的两种方法:
1.互斥锁。
2.逻辑过期。
1.互斥锁:
优点:没有额外的内存消耗; 保证一致性; 实现简单 。
缺点:线程需要等待,性能受影响; 还可能有死锁风险。
2.逻辑过期
1.优点: 线程无需等待,性能较好
2.缺点:不保证一致性;有额外内存消耗;实现复杂。
缓存雪崩
什么是缓存雪崩?
缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。
解决缓存雪崩的方法:
1.给不同的key的TTL添加随机值
2.给业务添加多级缓存
3.给缓存业务添加降级限流策略
4.利用Redis集群提高服务的可用性