关于记步方案怎么实现
业务规划了一个新的产品,有一个功能记步是不知道怎么实现更好,和大家讨论一下。 现在规划的方案是,在客户端统计用户的走路的步数,每隔 5 秒上传一次,现在有一个需求是,需要每满 1800 步就给用户发放 50 积分。现在的实现方案大致如下,引入了redis来做数据的存储
$r = $redis->incrby('xxx', $steps);
if ($r >= 1800) {
$redis->decrBy('xxx', 1800);
}
但是这里有一个问题就是,两步操作之间很可能会存在并发问题,如果想解决这个问题可能就需要引入 lua
脚本,但是这样感觉维护起来又稍微有点麻烦,看看大家有没有更好的方案来处理?
自己评估风险,这个项目是否值得做 :grin:
步数不做减法,再维护一个发放次数的字段,步数/1800的值每次和发放次数对比,差值发放
发放独立出来一个进程处理呢
既然是每
5
秒才上报一次,那同一个用户上报间隔小于2
秒的就忽略不就行了,难道2秒还不够你处理这些数据?为啥要用lua呢?pipe+watch足以不行加一个细粒度锁