note to fix bug
记录一次修复问题
缘由
运营接到客服的反馈,某个用户某个道具数量惊人,觉得有问题,需运营开发核查;运营也就直接转给了我。
问题原因
根据该用户获取的道具来源备注,快速定位到登录后免费获取某个道具(备注:每天只可以领取一次)。经过一番code review,发现每天领取一次这个道具的业务逻辑有明显漏洞,只是简单get,set每天领取的标示这样来判断是否需要领取(开发容易犯错的地方)。在并发的情况,很容易反复领取。
解决
快速解决方法是使用原子计数器解决(如:redis),本身项目有使用redis。 当然,还有其他方法,比如使用队列等等(容易忽略是:漏做“幂等”)
插曲
由于忙的原因,在初步定位出原因的情况下,请了另一个开发去修复;结果,该开发去模拟重现,加上重新去实现防并发的方法,测试等等,到了第二天上午还未修复;实在等不及,就很简单加了几行代码先上线了。(备注:自身的原因,没说明问题的严重性)
反思
- 对于这种问题,一定需要叮嘱问题的严重性,跟指出快速修复的重要性
- 对于这种免费获取道具等等的接口,被刷是很正常的;所以开发一定需要记得做防并发及业务的幂等
- 记得以前写过一篇redis记录 http://www.zshuiquan.com/blog/%E5%B7%A5%E4%BD%9C%E5%A4%B1%E8%AF%AF%E5%8F%8D%E7%9C%81-redis%E5%B9%B6%E5%8F%91%E9%97%AE%E9%A2%98.html
- Author: josephzeng
- License: CC BY-NC-ND 4.0