什么是缓存穿透、缓存击穿、缓存雪崩?如何预防?

*爱你&永不变心* 提交于 2021-02-18 02:20:24

一、什么是缓存穿透,如何预防?

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,请求直接打在了数据库上。 

对于缓存穿透的话一般来说只需要针对空值缓存就行,过期时间设置5-10分钟,这样就流量就不会打在数据库上导致死机宕机。

 

二、什么是缓存击穿,如何预防?

缓存击穿,是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

缓存击穿的话,设置热点数据永远不过期。或者加上互斥锁就能搞定了。

 

二、什么是缓存雪崩,如何预防?

缓存雪崩,是指在某一个时间段,缓存集中过期失效。

雪崩其实也可以做到提前预防,那就是用到过期时间的key,时间全部错开,此外,有些数据可以做永久保存的话那就直接保存好了,这样就不会造成大面积的key失效了。

1.永不过期

比如某些热点数据可以设置永不过期。

2.过期时间错开

处理缓存雪崩简单,在批量往Redis存数据的时候,把每个Key的失效时间都加个随机值就好了,这样可以保证数据不会在同一时间大面积失效。

如果Redis是集群部署,将热点数据均匀分布在不同的Redis库中也能避免全部失效的问题。

setRedis(Key,value,time + Math.random() * 10000)

3.多缓存结合

Redis结合ehcache或者memcached,先查redis再查memcached。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!