前言
最近我们的商城系统出现了一个线上问题,用户访问商城首页的时候要差不多20秒,才返回数据,可以说卡爆了。
到底怎么回事呢?
1.案发现场
上周四晚上,我们有一个正常的迭代版本按照预期的时候上线。
本次迭代,我所涉及的功能,很快上线,并且测试通过了。
但没法下班,因为项目组其他同事,还有线上问题在紧急处理。
我过去了解了一下情况,用户访问商城首页的时候响应太慢了,要20秒才返回,有用户投诉过来了。
进一步了解之后发现,造成这个问题的根本原因是redis服务器挂了。
为什么会挂呢?
是因为一次性往redis中存储的数据太多了,导致内存不足。
这个商城系统部署到了阿里云上,当时购买了1G的内存空间。
但由于这次上线,有个新功能,需要在商城首页上,按不同的地区,推荐不同的商品。商品还要按不同的分类做区分。
原本商品只有几十万其实不多,但是按地区和分类做区分之后,保存的数据量乘以了几百倍,一下子占用了大量的内存。
redis挂了为什么会导致首页慢呢?
答:因为代码中有业务逻辑,如果从redis中没有获取到数据,或者访问redis失败了,会从数据库中获取。虽说当时是晚上,用户并发量不大,但是直接访问数据库,响应时间一下子下降了很多。