根据名字根本无法看懂是什么意思,并且很容易和另一个词——缓存穿透搞混。缓存击穿指的是某个 key 一直在扛着高并发,所谓扛着高并发就是说大量的请求都是获取这个 key 对应的值。
而这个 key 在某个时间突然失效了,那是不是就意味着大量的请求就无法在缓存中获取数据了,而是去请求数据库了,这样很有可能导致数据库被击垮。这就是缓存击穿。
那现在问题知道了,该如何应对呢?这个就比较简单了,既然这个 key 这个受欢迎,那么就不要设置过期时间了,如果该key的数据更新了,那么就通过互斥锁的方式将其更新。
为什么要用互斥锁的方式?如果不使用互斥锁的方式很容易导致数据不一致的情况,这里为了保证缓存和数据库的一致性,就只能牺牲一点点的效率了。
缓存雪崩
不知道各位小伙伴都是来自哪里,我们那边有句方言叫“雪崩”,表示事情砸了的意思。这里的Redis 雪崩似乎有点异曲同工之妙。首先我们需要知道什么是 Redis雪崩,
Redis雪崩我们一般都称为缓存雪崩,意思就是说在某个时间节点,大量的 key 失效,导致大量的请求从缓存中获取不到数据而去请求数据库。根据数据库的压力必然是剧增的,如果是在一线互联网这样超高并发的场景下,数据库直接宕机。
重启也没有用,因为重启了还会有巨大的流量涌进来,然后继续被搞宕机。所以对于预防缓存雪崩这种情况的发生意义还是很大的的。
缓存雪崩解决方案之加随机值
上面已经详细介绍了什么是缓存雪崩,他是怎么发生的,那如果防止缓存雪崩呢?
很简单,因为上面刚刚说到,缓存雪崩是由于某个时间节点大量的 key 失效而导致的问题,那现在的问题不就是变成了如何防止同一个时间节点大量的 key 失效这种情况发生吗?
最简单的情况就是把key的过期时间分散开,也就是在设置key的过期时间的时候再加一个随机值,就这样就能完美的解决缓存雪崩的问题。
但是你以为我说到这里就完事了?既然是一次全安排,那么我一定不会仅仅告诉你一种解决方案就完事的。继续看
缓存雪崩解决方案之加锁
可能很多人看到这个方案表示不接受,加锁那不是限制了并发

(编辑:沧州站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|