php - 高并发,数据库性能波动,进程如果保证完整执行完
高洛峰
高洛峰 2017-04-11 10:11:58
[PHP讨论组]

一个竞价的需求,
用户A出价后随即VIP出价,值执行左边的这个进程时,
右边也开始出价,
如何保证VIP成功,b不成功???

类似于拍卖委托人,A出价后VIP立即由系统帮着出价(同一个进程里),但在A出价与系统出价之间会有间隙(虽然在同一个进程里但还是会有间隙存在),如果在这个间隙之间B出价了,且B出的价格与系统帮vip出价的价格相容,B的出价会显示在所有用户面前(及时性的),需求就是在这个间隙不让B出价,保证vip出完价格后,才能有人出价。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(9)
怪我咯

然后B出价后也有一个vip出价?

阿神

不是出价结束后去统计一下么,难道b出完价,东西就归他了?

伊谢尔伦

这不是一个事务的概念吗?

怪我咯

看你这个意思好像是只要之后有VIP出价,另外一边的就不能让他出价成功啊。VIP权利至高无上。要么做个延迟吧。要么这个就和预测未来的概念差不多。

阿神

这个应该是竞拍类需求吧,截止时间到了 再计算谁最后且价格最高 或者时间、价格一样判断vip优先就可以了

阿神

给vip的用户增加权重,普通用户比如1,vip:2,这样同样120的竞价,vip=120*2,这样价高者得

高洛峰

用redis队列, 该队列的长度约束为1.
定义队列的出入列方法:
普通用户出价定义为入列, VIP出价定义为出列.

比如对一物品进行竞拍,以该物品的唯一标识建立队列。A出价成功时,入列;VIP尚未出价,B出价入列时,检测到队列长度为1,出价入列失败。当VIP出价成功时, 出列。

PHP中文网

谢邀。

  1. B出价 > 校验VIP是否出价(查询VIP出价记录)

  2. 已出 > B出价成功

  3. 未出 > B出价失败

看题主的描述我的理解就是一个正常的校验逻辑。


确定VIP出价资格

  1. 分布式锁,简单直接,同时只能有1人出价,可以得到A的出价记录,计算VIP的出价资格

  2. 乐观锁在出价记录中增加一个version字段,采用compare and swap机制确定VIP出价

高洛峰

锁表
A出价成功后,锁表,此表数据无法读取。
A的业务逻辑完成,解锁。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号