缓存雪崩
目前电商首页以及热点数据都会去做缓存 ,一般缓存都是定时任务去刷新,或者是查不到之后去更新的,定时任务刷新就有一个问题。
举个简单的例子:如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。
解决方法:
- 第一,hystrix限流。
- 第二,分析用户的行为,尽量让缓存失效的时间均匀分布。
- 第三,如果是因为某台缓存服务器宕机,可以考虑做主备,比如:redis主备,但是双缓存涉及到更新事务的问题,update可能读到脏数据,需要好好解决。
缓存穿透
缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力。
(查询一个必然不存在的数据。比如文章表,查询一个不存在的id,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成影响。)
由于缓存不命中,每次都要查询持久层。从而失去缓存的意义。
解决方法:
- 缓存穿透可以使用布隆过滤器来解决,布隆过滤器原理请看https://blog.youkuaiyun.com/She_lock/article/details/103856260
本文探讨了缓存雪崩和缓存穿透两大难题,详细分析了其对数据库造成的影响及应对策略,包括使用Hystrix限流、均匀分布缓存失效时间和布隆过滤器等解决方案。
1174

被折叠的 条评论
为什么被折叠?



