日期:2014-05-20  浏览次数:20788 次

今天去面试,被问到一个问题,【秒杀】是如何来实现的?
秒杀的主要问题就是别卖超了,因为应用服务器有多台,所以synchronized肯定是不行的,直接访问DB肯定更不行了,那就只能是使用memcache或者redis之类来实现。

有知道细节的没?


------解决方案--------------------
刚一听,觉得是一个简单问题,然后一看楼主说服务器有多台,瞬间感觉不知道了
------解决方案--------------------
多台服务器用中间数据库来同步
------解决方案--------------------

memcache存成个list,index超出的部分返回错误值?或者不put?


------解决方案--------------------
应该是同步调用一台数据库,切相应速度很快,否则会出现误差
------解决方案--------------------
http://www.iteye.com/topic/1119017?page=1
这里有一些关于秒杀的讨论,可以参考一下。
------解决方案--------------------
多台服务器,数据共享。memcache当然行了。
其实数据库也行,就是效率太低,不太实用:你把相应的记录锁住或者把表锁了,就可以实现了。

------解决方案--------------------
技术方面就不多说了。。
但是实际上商家真正的操作上面用的不是啥高明的技术,而是登陆库存的时候就已经减了一定数量的库存来保证不超卖了。
------解决方案--------------------
没接触过 学习一下
------解决方案--------------------
直接用db我觉得可以啊,update时指明剩余数量要大于0,如果update返回1+则说明抢到了,返回0则说明没抢到,即便在update之前想做一些check那可以开事务然后select for update加个锁
------解决方案--------------------

------解决方案--------------------
为什么都要想到数据端呢?
考虑程序端解决啊,调用同一个接口,形成队列,然后处理队列的Index就OK了!
------解决方案--------------------
真心不懂,学习一下
------解决方案--------------------
引用:
为什么都要想到数据端呢?
考虑程序端解决啊,调用同一个接口,形成队列,然后处理队列的Index就OK了!


学习啦
------解决方案--------------------
引用:
http://www.iteye.com/topic/1119017?page=1
这里有一些关于秒杀的讨论,可以参考一下。


正解!
------解决方案--------------------
我们做的秒杀直接就是对DB操作的。
------解决方案--------------------
学习中
------解决方案--------------------
秒杀是土豪干的事
------解决方案--------------------
如果你秒杀过商品你应该能感觉出来,其实即使是多服务器那么肯定也有个中心处理的服务器,你访问的服务器会把你的请求提交到同一的处理服务器来进行处理,所以会出现点击秒杀后提示正在提交,结果说秒杀已经结束。
------解决方案--------------------
可以使用memcache将秒杀产品读入存储 每次秒杀通过MQ操作 有序进行 逐个递减