当前位置:首页 > 问答 > 正文

加了Redis后业务处理快多了,逻辑也能顺畅点儿,不用老卡着了

(用户说):“加了Redis后业务处理快多了,逻辑也能顺畅点儿,不用老卡着了。”

这话听着特别实在,就是咱们平时干活最直接的感受,我以前那个系统,没加Redis的时候,真是干啥啥卡,你就说一个最简单的用户登录吧,用户在前端输入完账号密码,一点击,那个小圈圈就得转上好一会儿,后台在干嘛呢?它得吭哧吭哧地去连接那个老重的数据库,执行一条查询语句,从好几百万条用户记录里把这个人捞出来,比对密码,这还只是登录这一下,登录成功了,页面上要展示这个用户的基本信息吧,比如头像、昵称、会员等级,每一样都得再去数据库里查一遍,要是赶上用户多,大家同时点登录,同时访问个人中心,数据库那点连接数根本不够用,CPU立马就飙上去了,结果就是,用户感觉页面一卡一卡的,点个按钮半天没反应,脾气急的可能直接就关页面走人了,我们当开发的也头疼,明明代码逻辑没问题,可系统就是快不起来,像陷在泥潭里走路,使不上劲。

加了Redis后业务处理快多了,逻辑也能顺畅点儿,不用老卡着了

后来,实在没办法了,就寻思着找个东西帮数据库分担一下压力,然后就了解到了Redis,刚开始听说又是个新东西,心里还有点打鼓,怕配置麻烦,怕增加了系统复杂度,但硬着头皮弄上去之后,那感觉,简直就是给一辆老牛车换上了跑车的发动机。

最明显的改善就是,那些以前动不动就要去数据库里“捞”的数据,现在直接从Redis里“拿”就行了,Redis这东西,是把数据放在服务器的内存里的,内存的读写速度,跟硬盘比起来,那是一个天上一个地下,比如用户登录成功后,我们就把他的基本信息在Redis里存一份,并设置一个过期时间,比如半小时,在这半小时内,这个用户再访问任何需要他个人信息的页面,系统都不用再去麻烦数据库了,直接伸手到Redis里一把就抓过来了,速度是毫秒级别的,用户那边几乎感觉不到延迟,页面“唰”地一下就出来了,这就是他说的“业务处理快多了”。

加了Redis后业务处理快多了,逻辑也能顺畅点儿,不用老卡着了

再一个就是“逻辑也能顺畅点儿”,这个顺畅,我理解不光是速度快,更是整个请求的处理过程变得干净利落了,以前,一个请求过来,业务逻辑里可能夹杂着好多条数据库查询,这些查询本身慢,还容易因为数据库压力大而超时或者失败,一失败就得处理异常,整个逻辑链就显得特别臃肿和脆弱,用了Redis之后,我们把很多频繁读取但又不常变化的数据都缓存了起来,比如网站的商品分类目录、一些基础的配置信息、热门文章的排行榜等等,这些数据一旦缓存到Redis,业务逻辑就简化成了:“先去Redis里看看有没有,有就直接用;没有,再去数据库取,取回来顺便塞到Redis里,下次再用就快了。” 这样一来,代码清爽了,数据库的压力骤减,因为大部分请求在Redis这一层就被消化掉了,根本到不了数据库,数据库轻松了,连带着那些确实需要跟数据库打交道的复杂查询,也因为竞争者少了而变得快了一些,整个系统就像一个疏通了血管的人,气血运行都通畅了。

还有他说的“不用老卡着了”,这个体验尤其体现在高并发的场景下,比如搞个秒杀活动,或者某个热点新闻突然爆发,瞬间涌进来大量用户,要是没有Redis,所有的查询和写入请求会像潮水一样直接拍在数据库上,数据库很可能当场就“挂”了,整个服务瘫痪,但有了Redis,我们可以用它来做很多事,可以把活动的商品库存提前加载到Redis里,用户的抢购请求先来扣减Redis里的库存,快速判断是否还有货,这个操作非常快,能扛住巨大的并发,然后再通过异步的方式,慢慢地去更新数据库里的最终库存,这样,虽然峰值压力很大,但系统表面上看依然能提供稳定的服务,用户不会遇到页面打不开、按钮点不动的情况,这就解决了最让人头疼的“卡死”问题。

回过头来再品品他那句话,“加了Redis后业务处理快多了,逻辑也能顺畅点儿,不用老卡着了”,这真的是一线开发者最朴实无华却又最精准的总结,它说的不是那些高深的理论指标,就是切身的体验:速度上去了,代码顺了,系统稳了,干活的心情都跟着变好了。