关于记步方案怎么实现

业务规划了一个新的产品,有一个功能记步是不知道怎么实现更好,和大家讨论一下。 现在规划的方案是,在客户端统计用户的走路的步数,每隔 5 秒上传一次,现在有一个需求是,需要每满 1800 步就给用户发放 50 积分。现在的实现方案大致如下,引入了redis来做数据的存储

$r = $redis->incrby('xxx', $steps);
if ($r >= 1800) {
    $redis->decrBy('xxx', 1800);
}

但是这里有一个问题就是,两步操作之间很可能会存在并发问题,如果想解决这个问题可能就需要引入 lua 脚本,但是这样感觉维护起来又稍微有点麻烦,看看大家有没有更好的方案来处理?

aab
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7
巴啦啦

自己评估风险,这个项目是否值得做 :grin:

2年前 评论

步数不做减法,再维护一个发放次数的字段,步数/1800的值每次和发放次数对比,差值发放

2年前 评论
aab (楼主) 2年前
寞小陌 (作者) 2年前

发放独立出来一个进程处理呢

2年前 评论

既然是每5秒才上报一次,那同一个用户上报间隔小于2秒的就忽略不就行了,难道2秒还不够你处理这些数据?

2年前 评论

为啥要用lua呢?pipe+watch足以不行加一个细粒度锁

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!