关于记步方案怎么实现

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

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

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

aab
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7
巴啦啦

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

1年前 评论

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

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

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

1年前 评论

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

1年前 评论

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

1年前 评论

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