前提条件:高并发
一、缓存穿透:
- 概念理解:
-
解决思路:
- 布隆过滤器:性能不错和存储量可控(不大); 缺点:只能添加值(可用升级版布谷鸟)
二、缓存击穿
- 概念理解:
-
解决思路:分布式锁+多线程维护锁的过期时间(避免死锁&锁过期但还未执行完成)
三、缓存雪崩
- 概念理解:可以理解为n个缓存同时被击穿
- 解决思路:
- 随机过期时间(无时间性要求)
- 预加载(可以提前获取到数据的),比如我在key中加入日期,但前提是我们可以提前获取到下一天的数据
- 强依赖击穿方案
四、分布式锁的实现方式
- 参考:http://redis.cn/topics/distlock.html
- java版实现:redision https://github.com/redisson/redisson
- 原理方式:
- setnx + 过期设置 + 客户端ID(value)
- lua表达式 or 事务性支持