以前参与的一个项目出现了这么一个问题:mysql
设备硬件上传了数据到数据中心,可是数据写入了mysql数据库,可是redis中查不到对应的值,理论上两个库都应该写的,负责那个项目的同事觉得是redis出bug了没有存入数据,我我的以为是数据有问题,以此为依据进行了排查。。redis
过程就不说了。。坑的一逼。。没什么用。。。sql
通过一小时的数据排查,发现做为主键的设备惟一编码,"ABCDEFG"这个东西,后面居然多了一个空格,变成了"ABCDEFG空格",可是在redis查询的时候,同事并无用命令行进行严格的查询,只是复制了ABCDEFG空格(不加引号)这个内容直接在命令行上查询,致使一直觉得数据没有写进去,其实redis已经将数据写到了"ABCDEFG空格"这个key中,最后使用hgetall "ABCDEFG空格"就将数据查询了出来,最后肯定为录入设备编号时用户手贱多打了一个空格。数据库
在这个意外的bug中,第一点问题就是系统在录入时没有作好参数过滤,在用户误输入空格时没有进行处理,这是最主要的问题,第二就是在进行命令行查询时,必定要使用严谨的查询方式,特别是字符串查询,必定要保证字符串格式正确,不要偷懒编码