老哥们, redis 存 6030 条进去 4520,会有哪些可能

2020-07-31 18:26:14 +08:00
 iblessyou

1.本地 windows 起了个 相同的代码,相同数据,就能全存进去,部署的服务器上 就怎么都对不上数。 2.此 redis 还有其他项目在用,但代码层面,可以排除影响。 3.每次都是 4520 4.配置里没设最大值限制 5.以前没出现过类似情况,这套代码部署过好多个服务器 6.KEY 绝对没有重复,这个反复验证过了 7.没看到哪报错了 …… w(゚Д゚)w~~~~~ w(゚Д゚)w~~~ w(゚Д゚)w

7307 次点击
所在节点    Redis
34 条回复
Repository
2020-07-31 23:40:05 +08:00
哈哈哈,想起我大学老师的一句话,代码运行结果不对先思考自己的问题,肯定不是编译器错了
moonsn
2020-07-31 23:42:47 +08:00
分析一下没插进去的数据的特性?
cz5424
2020-08-01 09:29:30 +08:00
给 redis 大佬们发邮件,说你们程序有问题(手动狗头
useben
2020-08-01 16:11:58 +08:00
可能有什么定时任务在搞鬼?
jifengg
2020-08-03 11:32:26 +08:00
刚想说有没有可能是 redis 回收机制给回收了,但是你说每次都是 4520,那就不是了。先找找软件之外的原因吧。
iblessyou
2020-08-03 14:48:37 +08:00
@msg7086
@Umenezumi
刚又试了,每次插的时候取一下,都能取出来,但执行完后 总数就是不对 w(゚Д゚)w
iblessyou
2020-08-03 14:49:40 +08:00
@Repository 我没怀疑编译器,现在就是在找到底是哪的问题
Umenezumi
2020-08-03 14:51:26 +08:00
@iblessyou 每插一次取两次即可。一次取本次插入的结果,一次取总条数。这样看更直观
IMCA1024
2020-08-03 15:55:30 +08:00
系统抖动
iblessyou
2020-08-03 15:59:15 +08:00
@rimutuyuan
@damean
@Foxkeh
@Jooooooooo
@lshero
@Repository
@useben
@jifengg

排查出来了……
尝试了存一条取一条,看日志是每个都可以取到的
然后查询的表刚好是个视图,就加了 limit 控制视图的数据量。
然后诡异的事情发生了……

表数据 100 条时,存入了 100 条
表数据 500 条时,存入了 500 条
表数据 1000 条时,存入了 768 条
表数据 600 条时,存入了 600 条
表数据 800 条时,存入了 800 条
表数据 1000 条时,存入了 1000 条
……

之后会反复出现类似问题,两次查询插入数量不一样,但是不管一样不一样后,哪怕清了 redis,再执行都会和之前是一样的数量。

猜猜最后是怎么找出的……













是这句查询 SQL 的坑
int rows =500;
....
String sql = "select * from Table t limit " + rows + " offset " + (i - 1) * rows;
....
这里他用了分页查询,每次查 1000 条把数据保存完了再查 500,
但是因为没使用排序,多次查询时,可能会每次的顺序不一样,导致上 500 条和下 500 查询出的可能会出现重复
加了个排序解决了
iblessyou
2020-08-03 16:01:42 +08:00
@Umenezumi 看楼上 解决了
这个错误有点低级,自己写的时候,一般都会习惯性加上排序,看别人代码反而反应不过来
吸取教训了
Jooooooooo
2020-08-03 16:17:56 +08:00
@iblessyou hhhh

果然诡异问题最后都是傻子原因, 我自己也经历过好多次
msg7086
2020-08-03 18:14:51 +08:00
@iblessyou 分页不加排序可还行。
而且插数据的话应该用流式取数据而不是分页吧,要不然每次取下一页的时候还要重查……
jifengg
2020-08-05 12:41:12 +08:00
果然还是被忽略的地方出了问题啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/694706

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX