缓存雪崩:
缓存雪崩指的是在短期之内大量的键过期或失效,导致大量的请求直接访问数据库,给数据库或者是后端服务器带来巨大的压力,导致系统性能下降甚至是系统崩溃。
产生原因:
第一个:在设置键过期时间的时候,刚好设置的相同的过期时间,导致大量的键值同时过期
第二个:缓存服务器出现故障,无法提供服务
解决方法:
第一个:在设置键的过期时间的时候,设置随机的过期时间防止大量的键同时过期。
第二个:实现缓存预热,在刚开启系统的时候,将一些热门数据提前放入缓存当中
第三个:设置熔断机制,当键大量失效的时候,直接向请求返回默认值或者是错误,避免大量请求直接访问后端服务以及数据库服务。
第四个:使用分布式缓存,将数据储存在多个服务节点上,将请求分散,缓解节点压力。
第五个:实时监控和报警,监控缓存系统的状态,及时发现异常情况,并通过报警机制提醒工作人员
缓存穿透:
缓存穿透是指存在大量的请求访问数据库以及缓存中不存在的数据
解决方法:
一:布隆过滤器:在查询请求到达时,直接判断数据库中是否含有该值,若无,则直接返回错误 二:返回空值,如果数据库和缓存中都不存在访问值,那么在缓存中将该键对应的值设为空值 三:请求限流,对于一些恶意的请求,直接返回错误。
缓存击穿:
缓存击穿指的是热门数据过期,导致大量请求访问数据库。
解决方案:
一:将热门数据的key设置为永不过期或者将过期时间设置长一点或者使用逻辑过期,逻辑过期之后才异步的查询数据库,在更新数据期间,返回旧的数据。
二:加上分布式锁或者是互斥锁。