redis控制抢红包金额

redis控制抢红包金额

redis控制抢红包金额

红包规则:总金额是10元,每次随机0.1元-0.5元,金额发送超过5元,后面每次随机0.01元-0.02元。

疑问:如果并发起来,计算金额发送超过5元会导致有部分人拿到0.5元?

请问这里需要怎么控制这种并发呢?

方案1:入队列进行计算(这种方案不可行 因为需及时返回金额结果)
方案2:使用brpop进行阻塞 是否可行?

麻烦帮忙看看方案2是否可行?如不行 是否有别的方案处理呢?


回答:

把每个红包的金额预先计算好,然后排队按顺序拿


回答:

可以使用 Redis 的 lua 脚本来做这件事情,伪代码 大概如下

// 设置已经领取的金额为 0 ,如果已存在则不设置

setnx rd_count_1 0

// 获取锁,如果失败就直接返回

if not (setnx rd_count_1_lock)

return -1

// 可以设置一个自动释放锁的时间,这个需要根据自己的业务来确定

expire rd_count_1_lock 100

// 获取 Redis 中已经领取的金额来判断,然后计算本次的金额

if (get rd_count_1) < 5

amount = rand(0.1, 0.5)

else

amount = rand(0.1, 0.2)

// 最后把本次的金额加到已经领取的金额上去

result = (incr rd_count_1 amount)

// 删除锁

del rd_count_1_lock

// 返回结果

return (amount, result)

以上是 redis控制抢红包金额 的全部内容, 来源链接: utcz.com/p/938141.html

回到顶部