PHP 并发过程中的数据乐观锁
admin
2023-06-20 19:01:39
0

造成并发的原因:有一个叫张三专家很火爆的,假设张三在这周三上午9点到10点之间有问诊排班,系统后台会生成本周三9点到10点的10个专家号,等待患者来定号,但张三太火爆了,结果有1 万个患者定票

假设数据库设计

uid(张三) time(时间) number(排班编号)

当一个请求过来的时候张三医生的排班号就会减一,这里流程假设有一万个请求同时请求张三医生的排班号,每个请求就会开辟一个进程,就会有一万个进程同时争夺张三医生的排班号,由于操作系统CPU 在不断的切换,等待,唤醒,。。。。(具体可以去了解多线程编程)。这样会造成多进程安全问题。

这时候就要添加乐观锁解决问题,在数据库表添加 verison (版本号)(accord)

id  uid  time       number(排班编号) version (版本号)  status(状态)

1  张三 9:00-9:10    z-0001           001            0

2  张三 9:10-9:20    z-001           002             0

......

php 代码:

$doctor = $_GET['doctor_id'];//接受医生的UID

$number = $_GET['number'];//排班编号

mysql_query("begin");//开启MYSQL 事务

$number =5;//定义查询次数,避免出现死循环

while(True && ++$i)

{

if($i<$num)

{


try{

$sql = "select version,id,number from accord where uid=".$doctor." and status=0 limit 1";

//假设$database_obj->query($sql);就直接执行SQL语句

//这个时候我们拿到了张三医生的排班号,假设这里拿到了id 为1的号

$data = $database_obj->query($sql);

 coding........

当你的业务逻辑做完后要更新id 为1排班号状态的时候

$sql = "update accord set status=1 where version=".$data['version']." and id=".$data['id'];

$data = $database_object->query($sql);

if(FALSE==$data)

{

  throw new Exception();//抛出异常

}

//如果成功就提交

mysql_query('commit');

关键:这个时候由于是并发数据请求,CPU 做不停的切换,进程在执行到这里的时候操作系统的执行权交给其他的进程,当前进程就处于等待状态,id 为一的排班状态被修改占用,SQL 语句执行失败

}catch(Exception $e)

{

mysql_query('rollback');

}

mysql_query('end');

}

break;

?>

以上就是乐观锁的原理,但根据自己的业务需要可以做如下改动,个人认为乐观锁并不是处理并发数据最好的方法。下面会介绍列队的方式




相关内容

热门资讯

特朗普:不着急与伊朗达成协议,... 美伊谈判来到关键时刻,双方能否达成协议备受全球关注。美国总统特朗普5月27日说,他不急着与伊朗达成协...
新一代网络与存储模组发布,释放... 来源:市场资讯 (来源:华为计算) 【中国,北京,2026年5月23日】鲲鹏昇腾开发者大会2026(...
网络安全人的2026:AI攻击... HSBC CEO在最近一次采访中说了一句话:"不要和AI对抗——银行正在因为AI裁员,也正在被AI攻...
7名科学家获2026年度邵逸夫... 中新社香港5月27日电 (记者 赵静怡)邵逸夫奖基金会27日在香港公布2026年度邵逸夫奖获奖名单,...
跨越式升级!解析Harmony... 2026年4月20日,华为正式发布了HUAWEI Pura X Max、HUAWEI MateBoo...
甘肃天水5G+智慧物流园开启快... 今年,天水5G+智慧物流园项目投入试运行以来,5G智慧分拣配送中心无人分拣设备运行稳定,日均分拣包裹...
禾电迅取得小型化北斗多频卫星天... 国家知识产权局信息显示,深圳市禾电迅科技有限公司取得一项名为“一种小型化北斗多频卫星天线”的专利,授...
特朗普警告盟友阿曼:不守规矩会... 新华社华盛顿5月27日电(记者黄强 徐剑梅)美国总统特朗普27日在白宫举行的内阁会议上说,霍尔木兹海...
4G DTU模块厂家梳理 工业... 导语:在工业物联网场景中,4G DTU模块作为数据传输的核心设备,其稳定性、兼容性及服务响应能力直接...
原创 美... 5月25日,华为在上海丢出了一颗深水炸弹。 半导体业务部总裁何庭波在IEEE国际电路与系统研讨会上,...