美文网首页
redis缓存穿透,缓存击穿,缓存雪崩

redis缓存穿透,缓存击穿,缓存雪崩

作者: 皮儿吃屁 | 来源:发表于2020-07-25 16:40 被阅读0次

1 缓存穿透

1.1 概念

缓存穿透表示查询一个不存在的数据,由于Redis没有缓存,去数据库查询也没有数据,所以没写入缓存,导致这个不存在的数据每次都需要去数据库查询,失去了缓存的意义。如果大量的请求没有获取到缓存,导致走数据库,有可能搞垮数据库,使整个服务瘫痪。

1.2解决思路

1.2.1 如果对应在数据库中的数据都不存在,我们将此key对应的value设置为一个默认的值,比如“NULL”,并设置一个缓存的失效时间。当然这个key的时效比正常的时效要小的多、

1.2.2 将可能出现的缓存key的组合方式的所有数值以hash形式存储在一个很大的bitmap中<布隆过滤器>(需要考虑如何将这个可能出现的数据的hash值之后同步到bitmap中, eg. 后端每次新增一个可能的组合就同步一次,或者 穷举),一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力

2 缓存击穿

2.1概念

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

2.2 解决思路

2.2.1设置缓存时,同时记录缓存过期时间,但这个过期时间要早于真正的过期时间,在缓存过期之前异步更新缓存数据。

3 缓存雪崩

3.1概念

指的是大量缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩。

3.2解决思路

3.2.1在设置缓存过期时间时,采用一个随机值,这样可以尽量避免缓存在同一时间过期。

3.2.2采用队列方式,防止大量并发的情况发生

3.3.3 类似2.2.1缓存击穿解决思路

相关文章

网友评论

      本文标题:redis缓存穿透,缓存击穿,缓存雪崩

      本文链接:https://www.haomeiwen.com/subject/zinplktx.html