常见的Redis架构设计缺陷(下)- 缓存击穿

常见的Redis架构设计缺陷(下)- 缓存击穿

什么是缓存击穿

所谓的缓存击穿,就是我们对于热点数据设置缓存时,对于这些key的过期策略考虑欠缺,而导致某个热点key过期时大量的请求瞬间穿透到数据库层,造成DB负载飙升,甚至服务器宕机的情况。

这里针对的主要是单个key的情况,对于批量key过期策略不当造成的问题通常被称之为缓存雪崩。它们二者之间十分相似却又有所不同,这里我们主要说说击穿的情况,有兴趣的可以再去深入了解。

过程:

原先热点key中的数据不需要去查询DB,流程是这样的:

常见的Redis架构设计缺陷(下)- 缓存击穿

某个key过期时候,如果处理不当,就变为以下这样:

常见的Redis架构设计缺陷(下)- 缓存击穿

如果过期瞬间的并发量很大,那么问题就出现了。

常见场景

商城经常会有抢购、秒杀一类的活动,参加活动的商品数据会被缓存起来,又比如运营人员发表的某篇文章、某张图片,这些都有可能成为热点数据,也都会被缓存起来。


解决方案

1.多个热点key的缓存过期时间应该被均匀错开;

2.重新设计缓冲过期方式,让其永远不会自动过期,这里的不过期并非真的不过期,而是配合使用分布式锁,当数据缓存超过一定时间之后,只有取得锁的请求允许重建缓存,其余均返回旧数据。

ps:关于如何使用Redis实现分布式锁,之前我们已经介绍过,还不清楚的小伙伴记得等会翻回去看看。

其他问题

除了上面缓存过期的问题,在超高并发的环境中,我们可能还会遇到以下的问题,这些问题留给大家自行探索,:

  1. 单个value的大小造成的网络阻塞;

  2. 如何避免因出现单机热点,热点key都落到同一台机子上面。

当然了,也欢迎大家在评论区一起进行探讨!


分享到:


相關文章: