一篇带你了解redis企业级解决方案---雪崩、击穿、穿透

用于学习后的自己总结,如有错漏恳请指教

缓存雪崩

原因:由于在较短的时间内大量的缓存数据过期了,然后在这个时间点的时候服务器去查询该数据,导致redis没有命中直接连接到数据库获取数据,然后数据库无法及时响应大量的请求导致对外呈现超时现象

解决方案:
1、大多数要走缓存的数据能否走静态化处理
2、构建多级缓存:nginx+redis+ehcache,一层一层缓存下去,缓解直接到达数据库获取数据
3、检查mysql严重耗时的业务进行优化,对数据库排查例如耗时很长的查询语句事务等
4、灾难预警机制:监控redis服务器的性能指标(雪崩对外最明显的就是cpu占用高)–cpu占用–内存容量—查询平均时间–线程数等指标
5、限流、降级:短时间内限制一部分的请求访问,降低应用服务器压力

缓存击穿

原因:在较短的时间内,某个热点数据过期,并且这个时候大量的请问访问该数据,导致redis没有命中直接请求数据库获取数据,导致数据库无法及时响应对外呈现超时现象(是不是和雪崩很像,下面有个对比说明)。

解决方案:
1、预先设定,比如某个值预先知道会被多次访问,此类信息加大过期时长。例如电商时候某种特价商品
2、现场调整,对流量激增的数据延长过期时间或者设置为永久性
3、后台刷新数据,启用定时任务,高峰来临之前刷新数据有效性
4、二级缓存,设置不同失效时间,保证不会同时失效
5、加锁,分布式锁防止被击穿,每执行一个操作需要锁上其他人不能进行操作,但要注意瓶颈因为加锁意味着是单线程执行。

缓存穿透

原因:用户大量发起缓存与数据库中都不该存在的数据,然后进行大量的请求发送,导致数据库压力过大。例如用户id是从0自增上去的,但请求的却是-1这类负数。通常这种情况是黑客人员在攻击网站

解决方案:
1、提前校验某些变量的值是否符合系统数据要求,在接口层校验将不符合的直接返回不去访问缓存或者数据库。
2、白名单策略:布隆过滤器
3、实时监控:监控redis的命中率与null数据的占比,根据倍数不同启动不同的排查流程然后使用黑名单进行监控

缓存击穿和缓存雪崩比较
缓存击穿是对特定的一个key进行高频的访问但这个缓存已经失效例如突然某位流量明星结婚了就有大量的粉丝进行搜索,然后缓存雪崩是因为大面积的缓存失效将DB数据库搞崩溃了。

猜你喜欢

转载自blog.csdn.net/weixin_43118891/article/details/108623529
今日推荐