
如何设置关于抢票、秒杀这种事务的功能实现
关于抢票、秒杀这种事务,我说说自个对这种高并发的理解吧,这里提出自己认为对比可行的几个计划:
计划一:运用行列来完成
能够依据例如MemcacheQ等这样的音讯行列,详细的完成计划这么表述吧
比方有100张票可供用户抢,那么就能够把这100张票放到缓存中,读写时不要加锁。 当并发量大的时分,可能有500人摆布抢票成功,这样关于500后边的恳求能够直接转到活动完毕的静态页面。进入的500自己中有400自己是不可能取得商品的。所以能够依据进入行列的先后顺序只能前100自己采购成功。后边400自己就直接转到活动完毕页面。当然进入500自己仅仅举个比方,至于多少能够自个调整。而活动完毕页面必定要用静态页面,不要用数据库。这样就减轻了数据库的压力。user.qzone.qq.com/1958306556/main】user.qzone.qq.com/1958307830/main】user.qzone.qq.com/1958313770/main】user.qzone.qq.com/1958340096/main】user.qzone.qq.com/1958346904/main】user.qzone.qq.com/1958362898/main】user.qzone.qq.com/1958373314/main】user.qzone.qq.com/1958374714/main】user.qzone.qq.com/1958379921/main】计划二:当有多台服务器时,能够选用分流的方式完成
当内存计数器已满:
后边进的人, 直接跳到到转到活动完毕的静态页面,
通知路由服务器,不在路由到这台服务器(这个值得参议)。
全部商品服务器进来的m/n*(1+0.1)自己再悉数转发到一台付款服务器上,进入付款
当product_key存在于memcached中时,全部用户都能够进入下单流程。
当进入付出流程时,首先往memcached寄存add(product_lock_key, “1″),
假如回来成功,进入付出流程。
假如不成,则阐明已经有人进入付出流程,则线程等待N秒,递归履行add操作。
user.qzone.qq.com/1958466597/main】user.qzone.qq.com/1958467987/main】user.qzone.qq.com/1958477204/main】user.qzone.qq.com/1958484539/main】user.qzone.qq.com/1958486724/main】user.qzone.qq.com/1958496401/main】user.qzone.qq.com/1958506897/main】user.qzone.qq.com/1958507864/main】user.qzone.qq.com/1958508405/main】user.qzone.qq.com/1958514927/main】user.qzone.qq.com/1958523264/main】user.qzone.qq.com/1958526170/main】user.qzone.qq.com/1958528130/main】user.qzone.qq.com/1958533270/main】
我经过你的问题,幻想了一下你的环境。
可能是 有100个票。 10万人抢。
你能够在服务器上做一个音讯列队。不管多少人抢票,都先放入音讯列队中。这样,咱们就把高并发,变成了一致的单线程。
这时分全部都好办了。长处是缓解了MYSQL的瞬时压力
但缺陷是,假如1秒内1万人点击抢票。有可能会形成瞬时用户拜访艰难。(由于我们都在列队)
假如你觉得慢了几百毫秒不能忍,那你就需要换一个做法:
这样的长处是不管MYSQL,仍是用户,都很轻松。
缺陷是,略微有点小麻烦。 看你详细需要了。
user.qzone.qq.com/1958381496/main】user.qzone.qq.com/1958388922/main】user.qzone.qq.com/1958396181/main】user.qzone.qq.com/1958410787/main】user.qzone.qq.com/1958434012/main】user.qzone.qq.com/1958450274/main】user.qzone.qq.com/1958458507/main】user.qzone.qq.com/1958459876/main】?
*您的姓名:
*联系手机:
固话电话:
E-mail:
所在单位:
需求数量:
*咨询内容: