打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PHP解决抢购、秒杀、抢楼、抽奖等阻塞式高并发库存防控超量的思路方法
  1. 方案一:使用消息队列来实现  
  2.   
  3. 可以基于例如MemcacheQ等这样的消息队列,具体的实现方案这么表述吧  
  4. 比如有100张票可供用户抢,那么就可以把这100张票放到缓存中,读写时不要加锁。 当并发量大的时候,可能有500人左右抢票成功,这样对于500后面的请求可以直接转到活动结束的静态页面。进去的500个人中有400个人是不可能获得商品的。所以可以根据进入队列的先后顺序只能前100个人购买成功。后面400个人就直接转到活动结束页面。当然进去500个人只是举个例子,至于多少可以自己调整。而活动结束页面一定要用静态页面,不要用数据库。这样就减轻了数据库的压力。  
  5.   
  6. 方案二:当有多台服务器时,可以采用分流的形式实现  
  7.   
  8. 假设有m张票, 有n台产品服务器接收请求,有x个请求路由服务器随机转发  
  9. 直接给每台产品服务器分配 m/n张票  
  10. 每台产品服务器内存做计数器,比如允许m/n*(1+0.1)个人进来。  
  11. 当内存计数器已满:  
  12. 后面进的人, 直接跳到到转到活动结束的静态页面,  
  13. 通知路由服务器,不在路由到这台服务器(这个值得商讨)。  
  14. 所有产品服务器进来的m/n*(1+0.1)个人再全部转发到一台付款服务器上,进入付款环节,看谁手快了,这时候人少,加锁什么的就简单的。  
  15.   
  16. 方案三、如果是单服务器,可以使用Memcache锁来实现  
  17.   
  18. product_key 为票的key  
  19. product_lock_key 为票锁key  
  20. 当product_key存在于memcached中时,所有用户都可以进入下单流程。  
  21. 当进入支付流程时,首先往memcached存放add(product_lock_key, “1″),  
  22. 如果返回成功,进入支付流程。  
  23. 如果不成,则说明已经有人进入支付流程,则线程等待N秒,递归执行add操作。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
memcached一致性hash
PHP企业级应用之常见缓存技术篇
网络架构设计方案
常用的web服务器都支持一定的并发用户数,这个并发用户数可以通过配置文件参数来进行配置
使用Varnish+ESI实现静态页面的局部缓存(思路篇)
生成静态页面的好处
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服