V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
awanganddong
V2EX  ›  程序员

有一个 redis 非实时处理用户消费信息 ,现在还需要统计用户消费,出现误差,该怎么取舍

  •  
  •   awanganddong · 2020-03-19 13:40:32 +08:00 · 1219 次点击
    这是一个创建于 1703 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在是把用户每次消费记录存入 zset 里边,然后积累用户的消费金额,然后过一段时间扣费。然后记录该时间段总的消费金额。

    在存入 zset 的同时,都会把用户每次消费记录写入到流水表中。

    现在做统计功能,总的消费金额那张表缺失相关字段,我必须查插流水表,这时候金额会有误差。

    有什么比较好的解决方案吗?

    6 条回复    2020-03-19 14:15:29 +08:00
    xcstream
        1
    xcstream  
       2020-03-19 13:50:28 +08:00
    可能原因 1 数据丢失 2 浮点数
    awanganddong
        2
    awanganddong  
    OP
       2020-03-19 13:57:32 +08:00
    现在这种方案,是每过一段时间直接统计用户总消费,然后写库。


    还有一种方案就是,我直接把每一条订单的详细信息,放入队列中,然后消费。这样就能保证流水表和金额总表一致性。就是操作数据库会非常频繁。
    rrfeng
        3
    rrfeng  
       2020-03-19 13:59:33 +08:00 via Android
    金钱不要用易失存储。

    可以缓存累积金额,然后扣款后再回 DB 保存。

    每次进行严格对账。
    sujin190
        4
    sujin190  
       2020-03-19 14:07:40 +08:00
    从现实来说,交易只有记账,没有余额账户一说,当前账户余额只是记账的统计快捷缓存结果,消费或者收入就是记账过程,余额变不变无关紧要,所以任何时候只能信任记账流水,记账统计加和与余额不等,那肯定就是余额错了啊,注意处理好精度损失啥的问题,你这是只扣余额不记账么?那么你要被自己坑死了。。
    liprais
        5
    liprais  
       2020-03-19 14:08:59 +08:00
    用数据库啊想啥呢
    awanganddong
        6
    awanganddong  
    OP
       2020-03-19 14:15:29 +08:00
    现在反思下,我发现我想歪了,完全可以直接订单数据落盘 db,然后 id 放 redis list 里边,然后消费。成功更改订单状态
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:22 · PVG 06:22 · LAX 14:22 · JFK 17:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.