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

2020-03-19 13:40:32 +08:00
 awanganddong

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

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

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

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

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


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

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

每次进行严格对账。
sujin190
2020-03-19 14:07:40 +08:00
从现实来说,交易只有记账,没有余额账户一说,当前账户余额只是记账的统计快捷缓存结果,消费或者收入就是记账过程,余额变不变无关紧要,所以任何时候只能信任记账流水,记账统计加和与余额不等,那肯定就是余额错了啊,注意处理好精度损失啥的问题,你这是只扣余额不记账么?那么你要被自己坑死了。。
liprais
2020-03-19 14:08:59 +08:00
用数据库啊想啥呢
awanganddong
2020-03-19 14:15:29 +08:00
现在反思下,我发现我想歪了,完全可以直接订单数据落盘 db,然后 id 放 redis list 里边,然后消费。成功更改订单状态

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

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

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

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

© 2021 V2EX