记一次人为操作问题导致的意外bug

之前参与的一个项目出现了这么一个问题:

设备硬件上传了数据到数据中心,但是数据写入了mysql数据库,但是redis中查不到对应的值,理论上两个库都应该写的,负责那个项目的同事以为是redis出bug了没有存入数据,我个人觉得是数据有问题,以此为依据进行了排查。。

过程就不说了。。坑的一逼。。没什么用。。。

经过一小时的数据排查,发现作为主键的设备唯一编码,"ABCDEFG"这个东西,后面竟然多了一个空格,变成了"ABCDEFG空格",但是在redis查询的时候,同事并没有用命令行进行严格的查询,只是复制了ABCDEFG空格(不加引号)这个内容直接在命令行上查询,导致一直以为数据没有写进去,其实redis已经将数据写到了"ABCDEFG空格"这个key中,最后使用hgetall "ABCDEFG空格"就将数据查询了出来,最后确定为录入设备编号时用户手贱多打了一个空格。

在这个意外的bug中,第一点问题就是系统在录入时没有做好参数过滤,在用户误输入空格时没有进行处理,这是最主要的问题,第二就是在进行命令行查询时,一定要使用严谨的查询方式,特别是字符串查询,一定要保证字符串格式正确,不要偷懒

猜你喜欢

转载自www.cnblogs.com/lsz920210/p/10845971.html