记一次重构实战的逻辑梳理记录

最近聚餐,小七被公司公认代码写的很优雅的朱大神表扬了,说看了这么多代码,就只有邀请短信那个功能的多线程用的好,这里把重构这块代码的思路写出来,毕竟思考一整天,编程半小时,重要的是思维。

业务需求

起飞前一定时间内,给满足条件的旅客发送可升舱信息。

逻辑整理

(1)查询可升舱航班(集合)
(2)查询每一个航班下可升舱旅客(集合)
(3)过滤旅客
(4)给满足条件的旅客,发送邀请升舱的短信

改造前

1、未做幂等和加锁,同一个接口,调多次,会造成数据积压和数据错误。
2、判断是否已经邀请,直接通过数据库查询,数据库压力过大。
3、发送短信需要旅客姓名,需要调用另一个接口获取旅客中文姓名,且接口调用时间过长需要1s左右。
4、整个接口都是同步的,包括发送短信。
5、数据入库时,是一条一条存储的。

改造后

1、增加分布式锁,防并发。
2、增加redis缓存。过滤数据,减少与数据库的操作,且查询时先通过缓存查找,提高系统吞吐量。
3、启用多线程调用第三方接口,并组装数据,提升效率。
4、使用mq解耦异步发送短信,因为发送结果不是重点,异步同步即可。
5、使用mysql批量插入,减少与数据库的交互。

程序运行速度对比

改造前,一个航班,100名乘客,邀请时长5-10分钟左右。
改造后,一个航班,100名乘客,初始化邀请需要2分钟(第一次邀请),第二次邀请2-4秒左右。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第七人格

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值