• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

php的几种并发解决方案

武飞扬头像
小塔猫
帮助1

解决方案1:文件锁

一.阻塞模式:(只要有其他进程已经加锁文件,当前进程会一直等其他进程解锁文件)

public function index(){
f p = f o p e n ( " l o c k . t x t " , " w " ) i f ( f l o c k ( fp = fopen("lock.txt","w ") if(flock( fp=fopen("lock.txt","w ")if(flock(fp,LOCK_EX))
{
// 处理业务逻辑

   flock($fp,LOCK_UN);              
}
fclose($fp)

}
基础介绍:
1.读写方式打开或者创建文件lock.txt 文件
2.给lock.txt文件上"独占锁",上锁成功可进行下一步逻辑
3.处理完数据后,释放锁,以及fclose关闭打开的文件

二.非阻塞模式:(只要有其他进程已经加锁文件,当前进程不会等其他进程解锁文件直接返回)

public function index()
{
f p = f o p e n ( " l o c k . t x t " , " w " ) i f ( f l o c k ( fp = fopen("lock.txt","w ") if(flock( fp=fopen("lock.txt","w ")if(flock(fp,LOCK_EX|LOCK_NB))
{
// 处理业务逻辑
flock(KaTeX parse error: Expected 'EOF', got '}' at position 18: …,LOCK_UN); }̲ fclose(fp)
}
php 函数 flock解释:
语法:flock(file,lock,block)
参数1:file 必需。规定要锁定或释放的已打开的文件
参数2:lock 必需。规定要使用哪种锁定类型。
LOCK_SH - 共享锁定(读取的程序)。允许其他进程访问该文件
LOCK_EX - 独占锁定(写入的程序)。防止其他进程访问该文件
LOCK_UN - 释放一个共享锁定或者独占锁定
LOCK_NB - 锁定的情况下避免阻塞其他进程
参数3:block 选填。若设置为1,则当进行锁定时阻塞其他进程。

解决方案2:Mysql 锁机制(GET_LOCK)

优点:可解决用户个人并发及事件并发
select GET_LOCK(‘code.1.2022-09-27’,10) // 加锁
select RELEASE_LOCK(‘code.1.2022-09-27’) // 解锁
select IS_FREE_LOCK(‘code.1.2022-09-27’) // 返回当前连接id,表示锁正在被使用 返回0 表示占用
select IS_USED_LOCK(‘code.1.2022-09-27’) // 可以查看目前占用该锁的连接id
缺点:会叠加锁,当出现叠加情况下,需要执行多次删除锁操作

解决方案3:悲观锁|乐观锁

悲观锁:假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住
存储引擎必须是innodb类型,必须在事务中执行
加上for update查询表id=10数据,这条数据就被锁定了,第一个获得锁的,后面的人
只能等待第一个人完成事务提交后才能获得锁进行操作。
案例:
select * from user where id = 10 for update
注意点:MySQL InnoDB默认行级锁,行级锁都是基于索引的,如果一条sql语句没用到索引
就不会使用。

乐观锁:乐观锁假设认为数据一般情况下不会造成冲突,使用在数据进行更新的时候,才会
正式对数据的冲突与否进行检测,如果发现冲突了,则返回用户错误信息。
案例:
一般实现乐观锁的方式就是使用数据版本
假设user表中有三个字段,分别为id,v1,v2
先读task表数据,得到v1,v2的值进行比对,不相等则走回滚
相等则更新v2的值如:v2 = v2 1,然后走业务逻辑
当业务逻辑走完之后,将v1的值也修改跟v2一样,则结束本次流程

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhighgbf
系列文章
更多 icon
同类精品
更多 icon
继续加载