Rails 如何实现抢购功能

chile · 2016年04月27日 · 最后由 chile 回复于 2016年04月29日 · 4584 次阅读

毕业设计做的是一个在线抢购的平台,想问一下怎么才能实现抢购的功能,主要是要保证数据一致性。。。抢着抢着就变成了 -1.。。好蛋疼。。求教

点了抢购按钮,用户抢购信息直接进队列之类来顺序处理。可参考golang 在小米抢购系统

CAP 模型,看你放弃 AP 哪个了。队列确实不错,可以认为牺牲了 A。

偷懒可以用摇奖的方法,比如 1000 台机器,允许有超过 1000 个人买,然后进入摇奖系统,摇到的才给付钱。

java 的话用 ThreadLocal、volatile、synchronized,数据库的五种事务隔离

抢购真要做好可不是那么简单的,好的电商团队多年打磨才能做好一个抢购系统,你毕设做这个真是牛逼啊

最简单的做法,用 redis . 以商品 id 为 redis 键,比如 id 是 1. 设置 100 个库存 set 1 100 用 DECR 减库存 decr 1 , 返回如果小于 0,那么库存不足,用 incr 1 把库存加回 0,再返回给客户端库存不足。

不久之前我给一个作坊公司做过一个抢购系统,在他们的一个特别垃圾的架构上一个人花了两周时间做出来的,确实不是那么好做,那公司现在还拿这功能到处吹了,就这还嫌开发进度慢,早知道这玩意儿这么值钱我就去北京做了

设置一个队列,把队列的长度设置为商品库存量的长度。然后请求进来直接放入队列,超出队列长度的返回抢购结束。然后队列的用户慢慢执行库存减少、订单生成、订单支付等操作。

很多的,做交易所的有各种每秒百万请求的配单系统轮子

#1 楼 @yzdel2000 好的我看一下哈~谢谢~

#9 楼 @haoxilu 嗯嗯 OK,谢谢提供思路

#6 楼 @cxh116 OK,我看下大家提供的方法实现的难度😂,thx

#5 楼 @alucardpj 额。。。内部抢购,不用做那么牛逼。。。。并发不会那么多。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号