今天在写一个排序功能的时候,将排好序的id字段拿出来然后组装成了一个list直接放入了redis,这时候我想将排好序的列表拿出来然后跟数据库中排好序的id对比一下,测试功能是否实现了,然后我从redis客户端工具里面将我那个key所对应的value拿出来,这时候我没有一个个对比,我直接拿了第一的id,用客户端工具去库里查,看看是否查到,这时候问题来了:我用那个id查到了那条数据并且排序也是对的,但是我仔细对比了一下发现查询的id字段和数据本身的字段对不上,两者相差了2(long型),然后我用其他的long型字段都测试了一下发现全部存在这个问题,在原本数据的4-->-4范围内都可以查到那条数据(假如在这个范围内还有其他数据的字段是否都能查到??懒一下,没有测试);
那么有一个问题来了,我在程序里的使用会不会也会存在这个问题呢?
我测试了一下是正常的,然后百度了一下,发现long型的字段搜索必须要加上NumberLong("*******"),这样才可以精确的匹配到,这里也还存在着细节问题,如果在括号中不用上双引号的,那么还是一样;
这时,我发现另一个问题出来了,为什么我存入redis的数据从客户端工具拿出来后和库里的对不上,long型数据末尾全部变成了0,我想这可能是序列化的问题吧,我之前是从客户端直接复制出来的,然后我到程序里用代码去取,debug了一下发现取出来的数据也是正常的;
总结:使用mongo客户端工具在查询long型字段时需要注意用NumberLong("*******"),如果不用的话,那么在原来数据的4-->-4范围内也可以查询到,猜测:在使用mongoTemplate查询long型字段时,很可能他给我们做了这个封装,所以在查询时不存在我之前说的问题;
redis中的问题,在用客户端拿出数据做对比时,可能数据与库中的不一样,那么很可能是序列化的问题,可以在代码中测试一下是否是因为序列化;
网友评论