老哥们, redis 存 6030 条进去 4520,会有哪些可能 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iblessyou
V2EX    Redis

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

  •  
  •   iblessyou 2020-07-31 18:26:14 +08:00 7807 次点击
    这是一个创建于 1959 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    34 条回复    2020-08-05 12:41:12 +08:00
    tomczhen
        1
    tomczhen  
       2020-07-31 18:29:52 +08:00 via Android   1
    最近有疫情,又有水患,水电戾气太重,火电受病毒影响,最好换成核电,这样 CPU 的电子更纯净,自然电到 bug 消。
    (狗头保命
    skiworld
        2
    skiworld  
       2020-07-31 18:32:04 +08:00
    太阳黑子活动也会造成主板 CPU 功能异常
    msg7086
        3
    msg7086  
       2020-07-31 18:32:50 +08:00
    插完取一下数看看对不对呗。
    Umenezumi
        4
    Umenezumi  
       2020-07-31 18:49:32 +08:00
    每次插入的时候取一下试试呗
    Cielsky
        5
    Cielsky  
       2020-07-31 18:50:38 +08:00 via Android
    @tomczhen 建国后不许成精
    14v45mJPBYJW8dT7
        6
    14v45mJPBYJW8dT7  
       2020-07-31 18:52:55 +08:00
    一般这时候都是人出问题了

    看看你取的 key 是不是就 4520 条
        7
    Leigg  
       2020-07-31 19:07:10 +08:00 via Android
    抽插的时候注意观察
    Vegetable
        8
    Vegetable  
       2020-07-31 19:07:58 +08:00
    @Leigg 拷走
    damean
        9
    damean  
       2020-07-31 19:12:59 +08:00
    每存一条,打印一条日志记录下,看是从哪一条开始出问题了
    Foxkeh
        10
    Foxkeh  
       2020-07-31 19:32:29 +08:00
    1.确定这 6030 条 KEY 真的没重复
    2.确定你真的插入了 6030 条
    3.每次都是 4520 是不是最终出来的结果都是同样的 4520 条?
    -如果是,插入后检查,那些条目的 K,V 有什么特征,比如长度,类型, 排查覆盖记录的嫌疑
    -如果不是,KEY 数量,内存或硬盘占用是不是到了预设上限?
    lshero
        11
    lshero  
       2020-07-31 19:34:31 +08:00
    Redis 压力不大的话 运维没有禁用的话 monitor 命令用起来
    Jooooooooo
        12
    Jooooooooo  
       2020-07-31 19:40:04 +08:00
    信息太少了

    不过我会这么排查

    存 6031 条最后能拿到多少条?

    存 10 条呢?

    存 100 条呢?

    到底啥时候会开始丢数据

    丢的内容有啥规律吗?
    iblessyou
        13
    iblessyou  
    OP
       2020-07-31 20:04:13 +08:00
    @Jooooooooo 新部署了个 redis 都还是那样。。。
    下周用你这方法试下, 代码里少取点存着试试 ,
    那边正式环境 换一次代码不容易,所以一直尽量没用代码改动来测。数据就更不敢乱动了


    @rimutuyuan
    @Foxkeh
    1,非常确定 key 无重复
    2,插入的确是 6030 (不管是从代码的日志),还是我本地用相同的代码和数据测试
    3,很可能不是同样的
    4,内存方面,redis 没设上限,硬盘应该不至于,还运行其他的呢,不至于差这几条数据。
    当然其他还有那的设置,我就不知道了,来就是让大家看看,会有什么可能
    iblessyou
        14
    iblessyou  
    OP
       2020-07-31 20:05:05 +08:00
    @lshero 好像没装 redis-cli 用不了?
    iblessyou
        15
    iblessyou  
    OP
       2020-07-31 20:06:06 +08:00
    @Umenezumi 这办法不错 接下来试试
    lshero
        16
    lshero  
       2020-07-31 20:19:02 +08:00
    @iblessyou 可以用 TELNET
    EminemW
        17
    EminemW  
       2020-07-31 20:40:13 +08:00
    默认内存超过 50 会清 diao
    ETiV
        18
    ETiV  
       2020-07-31 20:43:36 +08:00 via iPhone
    二分查找…
    wakzz
        19
    wakzz  
       2020-07-31 22:57:46 +08:00
    aof 日志,先分析一波,看看存的 6030 条都在里面,是否有其他请求删除了部分数据。
    wuwukai007
        20
    wuwukai007  
       2020-07-31 23:05:25 +08:00 via Android
    根据我多年的经验,找自己原因,千万别怀疑编译器
    Repository
        21
    Repository  
       2020-07-31 23:40:05 +08:00 via Android
    哈哈哈,想起我大学老师的一句话,代码运行结果不对先思考自己的问题,肯定不是编译器错了
    moonsn
        22
    moonsn  
       2020-07-31 23:42:47 +08:00 via Android
    分析一下没插进去的数据的特性?
    cz5424
        23
    cz5424  
       2020-08-01 09:29:30 +08:00 via iPhone
    给 redis 大佬们发邮件,说你们程序有问题(手动狗头
    useben
        24
    useben  
       2020-08-01 16:11:58 +08:00
    可能有什么定时任务在搞鬼?
    jifengg
        25
    jifengg  
       2020-08-03 11:32:26 +08:00
    刚想说有没有可能是 redis 回收机制给回收了,但是你说每次都是 4520,那就不是了。先找找软件之外的原因吧。
    iblessyou
        26
    iblessyou  
    OP
       2020-08-03 14:48:37 +08:00
    @msg7086
    @Umenezumi
    刚又试了,每次插的时候取一下,都能取出来,但执行完后 总数就是不对 w(Д)w
    iblessyou
        27
    iblessyou  
    OP
       2020-08-03 14:49:40 +08:00
    @Repository 我没怀疑编译器,现在就是在找到底是哪的问题
    Umenezumi
        28
    Umenezumi  
       2020-08-03 14:51:26 +08:00
    @iblessyou 每插一次取两次即可。一次取本次插入的结果,一次取总条数。这样看更直观
    IMCA1024
        29
    IMCA1024  
       2020-08-03 15:55:30 +08:00
    系统抖动
    iblessyou
        30
    iblessyou  
    OP
       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
        31
    iblessyou  
    OP
       2020-08-03 16:01:42 +08:00
    @Umenezumi 看楼上 解决了
    这个错误有点低级,自己写的时候,一般都会习惯性加上排序,看别人代码反而反应不过来
    吸取教训了
    Jooooooooo
        32
    Jooooooooo  
       2020-08-03 16:17:56 +08:00
    @iblessyou hhhh

    果然诡异问题最后都是傻子原因, 我自己也经历过好多次
    msg7086
        33
    msg7086  
       2020-08-03 18:14:51 +08:00
    @iblessyou 分页不加排序可还行。
    而且插数据的话应该用流式取数据而不是分页吧,要不然每次取下一页的时候还要重查……
    jifengg
        34
    jifengg  
       2020-08-05 12:41:12 +08:00
    果然还是被忽略的地方出了问题啊。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5277 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 06:37 PVG 14:37 LAX 22:37 JFK 01:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86