1.缓存雪崩
原因
:
Redis中大量的Key同时过期,导致大量的请求访问到数据库,甚至造成数据库宕机;
解决方案
- 搭建Redis集群来解决这个问题;
- 在Key上加一个随机的过期时间,防止批量Key过期;
2.缓存击穿
原因
:
Redis中某一个热点Key突然失效,导致大量的请求访问数据库;
这样就导致了高并发情况下请求直接穿透Redis缓存,到达数据库,给数据库造成非常大的压力;
解决方案
- 考虑这个热点的Key是否需要设置不过期,或者根据相关需求设置合理的过期时间;
3.缓存穿透
原因
:
某一时刻大量不存在的Key访问到Redis服务,可以理解为一个黑客伪造大批量脏数据访问到缓存当中,因为缓存中没有这些Key,所以造成批量穿透访问到数据库;
解决方案
- 使用
布隆过滤器
,只要是它认为是不存在的Key,那么这个Key就不存在,所以可以设置在缓存之前加一层布隆过滤器,拦截不存在的Key
; - 布隆过滤器代码参考:java做布隆过滤器|简易
Redis集群策略
Redis提供了三种集群策略:1
>
主从模式;2>
哨兵模式;3>
cluster模式;
-
主从模式:将一台Redis服务器的数据复制到其他Redis服务器的一个过程,前者称为
主节点(master)
,后者称为从节点(salve)
;
缺点:如果客户端连接某一个主节点或者从节点突然宕机,需要人工手动修改ip连接别的服务器,并且内存有限,无法支持大的数据; -
哨兵模式:基于主从模式,监听主节点是否在服(是否宕机),如果主节点宕机了之后,会选择一个从节点作为主节点;哨兵模式也可以做集群,如果宕机之后其他哨兵还可以继续工作;
-
cluster模式
:支持多主多从,将Key进行运算之后按照Key进行槽位分配,使不同的Key分配到不同的主节点上,如果某个主节点出现宕机的情况就会它的从节点中选举一个从节点作为主节点;