1.缓存穿透
高并发场景下,大量结果为null的请求打入系统。这样会迅速消耗尽数据库连接数资源,最终导致数据库连接不可用
解决方法:
- 增加请求校验:如何请求的id如果是long,如果发过来的id不是long那就直接返回
- 布隆过滤器:检索一个元素是否在一个集合中,通过hash函数将一个元素映射成位阵列(bit array)的一个点。后续查询我们只需要看这个点是不是1,就知道集合中有没有这个元素了
- 如果使用布隆过滤器,我们需要考虑缓存预热,将所有待查询的id提前存入过滤器,后续每次添加数据也需要将新的id存入过滤器。
- 一般我们通过guava或者redisson实现
- 缓存空/null值:容易被故意增大redis压力,处理不好会有数据不一致的情况。使用这个方法时一定要给key设置一个短暂的过期时间
2.缓存雪崩
高并发场景下,大量key同时失效导致大量请求同时涌入数据库,迅速耗尽数据库连接数导致其不可用
解决方法:
- 对同一类型key设置不同的过期时间
- 缓存预热:通过定时任务定时的将数据库的数据同步到缓存中
- 加同步锁
3.缓存击穿
高并发场景下,热点key突然失效,大量热点key突然打入数据库,连接数耗尽不可用
解决方法
- 同步锁
- 热点key取消过期时间
分布式同步锁解决雪崩与击穿问题
——用redisson,后面再补了,现在懒得写了
标签:缓存,数据库,雪崩,key,过滤器,id,三剑客 From: https://www.cnblogs.com/kun1790051360/p/18619585