1. 缓存击穿
什么是缓存击穿
缓存击穿也叫热点key问题,就是一个被
高并发访问
并且
缓存重建业务比较复杂
的key突然失效,无数的请求访问会在瞬间给数据库带来巨大的冲击。
常见解决办法
1. 互斥锁
2. 逻辑过期
expire 就是逻辑过期key
解决方案对比
解决办法 | 优点 | 缺点 |
---|---|---|
互斥锁 | 1.没有额外内存消耗;2.保证一致性;3.实现简单 | 1.线程需要等待,性能受影响;2.可能有死锁风险 |
逻辑过期 | 线程无需等待,性能较好 | 1.不保证一致性;2.有额外内存消耗;3.实现复杂 |
2.缓存雪崩
什么是缓存雪崩
缓存雪崩是指在同一时段
大量的缓存key同时失效或者redis服务宕机
,导致大量请求直达数据库,带来巨大压力。
常见解决办法
- 给不同的key的TTL添加随机值,防止同一时间失效
- 利用redis集群提高服务的可用性
- 给缓存业务添加降级限流策略
- 给业务添加多级缓存
缓存穿透
什么是缓存穿透
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。
常见解决办法
1. 缓存空对象
2. 布隆过滤器
解决方案对比
解决方案 | 优点 | 缺点 |
---|---|---|
缓存空对象 | 实现简单,维护方便 | 额外内存消耗,可能造成短期数据不一致 |
布隆过滤器 | 内存占用少,没有多余key | 实现复杂,存在误判 |
版权声明:本文为weixin_45656095原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。