Redis缓存雪崩、穿透、击穿
1.缓存雪崩了解吗
Redis中数据同一时刻大面积失效,那一瞬间Redis和没有一样,此时如果存在大量请求,会直接打到MySql数据库上,MySql数据库会瘫痪,无法提供服务,整个系统就崩掉了。
如何应对呢?
处理缓存雪崩很简单,在批量往Redis存数据的时候,把每个key的失效时间加个随机值就好了,保证数据在同一时刻不会大面积失效,数据库负担过重。
1 | setRedis(Key,value,time + Math.random() * 10000); |
如果Redis时集群部署,可以将热点数据均匀分散到各个Redis库中,避免全部失效。
也可以设置热点数据永不过期,更新时覆盖即可。
2.缓存穿透、击穿
缓存穿透是指缓存和数据库中都没有的数据,而用户在不断的发送请求。此时的用户很有可能是攻击者,会导致数据库压力过大。(先查缓存,没有就去数据库查)
如何解决呢?
增加校验,拦截不合理的请求。
从缓存和数据库都取不到的数据,可以在缓存中添加key对应valu为null的一条数据,有效时间可以设置短点
缓存击穿和缓存雪崩类似,但有点不同。缓存击穿指的是有一个key非常热点,在不停的扛着大并发,在该key失效的一瞬间,会有大量请求击穿缓存打到数据库,导致数据库负担过重。
如何解决呢?
- 设置热点数据永不过期
- 加上互斥锁
原文作者: NTJD
原文链接: http://yoursite.com/2020/08/13/Redis缓存雪崩、穿透、击穿/
版权声明: 转载请注明出处(必须保留作者署名及链接)