问题
一个在dev环境和uat环境验证过多次的功能,上生产短短两日就出现问题。一次防重校验把正确的数据拦截到了。
排查过程
1.代码逻辑的检查
多次并且反复梳理这个功能的代码片段,逻辑没有任何问题。dev环境和uat环境也没能复现。
2.考虑是否是缓存
1秒否定,这个项目并发小,数据量也小,至少目前没有缓存的必要
3.mysql是否进了脏数据
经过排查,没有脏数据
4.是否事务没有控制好,脏读、幻读?
因为使用的编程式事务,经过排查,到这一步校验前还没有进行过事务操作,这种可能也排除
5.隐式类型转换
因为上线比较急,熬了两天夜,排查到这里的时候头已经乱了,人也恍惚了,遂向同样即将崩溃的前辈请教了一句,得到的反馈是隐式类型转换,sql一测,代码一检查,我擦,真是这个问题。
总结
吃一堑长一智,希望这次教训让我以后避免同样的错误