• 请不要在回答技术问题时复制粘贴 AI 生成的内容
awanganddong
V2EX  ›  程序员

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

  •  
  •   awanganddong · Mar 19, 2020 · 1581 views
    This topic created in 2257 days ago, the information mentioned may be changed or developed.

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

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

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

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

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


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

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

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