php处理并发有哪些技术

本文实例讲述了php开发中解决并发问题的几种实现方法。分享给大家供大家参考,具体如下:

php处理并发有哪些技术

对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了

在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制。

方案一:使用文件锁排它锁 (推荐学习:PHP视频教程)

立即学习“PHP免费学习笔记(深入)”;

flock函数用于获取文件的锁,这个锁同时只能被一个线程获取到,其它没有获取到锁的线程要么阻塞,要么获取失败

在获取到锁的时候,先查询库存,如果库存大于0,则进行下订单操作,减库存,然后释放锁

方案二:使用Mysql数据库提供的悲观锁

Innodb存储引擎支持行级锁,当某行数据被锁定时,其他进程不能对这行数据进行操作

先查询并锁定行:

select stock_num from table where id=1 for updateif(stock_num > 0){//下订单update table set stock_num=stock-1 where id=1}

登录后复制

方案三:使用队列

将用户的下单请求依次存入一个队列中,后台用一个单独的进程处理队列中的下单请求

方案四:使用Redis

redis的操作都是原子性的,可以将商品的库存存入redis中,下单之前对库存进行decr操作,如果返回的值大于等于0等可以下单,否则不能下单,这种方式效率较高

if(redis->get('stock_num') > 0){ stock_num = redis->decr('stock_num') if(stock_num >= 0){ //下订单 }else{ //库存不足 }}else{//库存不足}

登录后复制

其他并发问题:

在现实应用中,很多情况下会把数据存入缓存,当缓存失效时,去数据库取数据并重新设置缓存,如果这时并发量很大,会有很多进程同时去数据库取数据,导致很多请求

穿透到数据库,而使数据库奔溃,这里可用文件锁来解决

$data = $cache->get('key');if(!$data){  $fp = fopen('lockfile');  if(flock($fp, LOCK_EX)){    $data = $cache->get('key');//拿到锁后再次检查缓存,这时可能已经有了    if(!$data){      $data = mysql->query();      $cache->set('key', $data);    }    flock($fp, LOCK_UN);  }  fclose($fp);}

登录后复制

说白了,要解决并发问题就必须要加锁,各种方案的本质都是加锁

以上就是php处理并发有哪些技术的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2523305.html

(0)
上一篇 2025年3月5日 17:39:48
下一篇 2025年3月5日 17:40:00

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • app开发用哪个php框架

    php开发app最常使用的框架 1、ThinkPHP框架 TP框架是一共快速兼容简单的轻量级国产PHP开发框架,使用面向对象的结构和MVC模式进行开发。它可以支持Windows、Linux等服务器,并且支持MySql、Sqlite等多种数据…

    2025年3月5日
    100
  • php怎么导出文件

    php怎么导出文件? 在php编程中,如果要将查询结果导出到Excel,只需对页面的Context-Type做修改即可。 例如: 代码示例: header(“Content-Type: application/vnd.ms-excel”) …

    2025年3月5日
    200
  • php抽象类有什么用

    抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。 抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。  (推荐学习:PHP视…

    2025年3月5日
    200
  • php怎么查询

    php怎么查询php信息? 1、方法一: 命令行查询,如果已经配置好环境变量,直接在命令行中输入php -v,将会显示php的版本信息。如果没有配置环境变量,直接在命令行中进入到php的安装目录后,再输入命令php -v,在安装目录下输入查…

    2025年3月5日 编程技术
    200
  • php常量是全局的吗

    php 常量 常量是单个值的标识符(名称)。在脚本中无法改变该值。 有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。(推荐学习:PHP视频教程) 注:与变量不同,常量贯穿整个脚本是自动全局的。 立即学习“PHP免费学习笔记(深…

    2025年3月5日
    200
  • php怎么打包上传到服务器

    php怎么打包上传到服务器? 用FTP上传工具上传即可。这里以8UFTP软件为例: 1、下载安装FTP软件,输入服务器IP地址,FTP的用户名和密码进行连接。 2、连接FTP后,找到要上传的PHP项目文件,上传到服务器即可。 立即学习“PH…

    2025年3月5日
    200
  • php常见的几种攻击

    php常见的攻击有: SQL注入 SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。还有一种是通过system()或exec()命令注入的,它具有相同的SQL注入机制,但只针对shell命令。(推荐学习…

    2025年3月5日
    200
  • php在哪里运行

    php在哪里运行? 运行PHP文件 首先我们可以在apache中运行,保证电脑安装了apache 然后找到htdoc文件夹,如下图所示,打开他 立即学习“PHP免费学习笔记(深入)”; 接着将php文件拷贝到htdoc目录下面,然后直接在浏…

    2025年3月5日 编程技术
    200
  • php常见的错误类型有哪四种

    在php中,由于语法或逻辑上的问题,都可能会导致错误的发生,因此php的错误可以分为好几种类型。 PHP中存在各种类型的错误,但它基本上可以分为为四种主要类型的错误。下面我们就来看看这四种主要的错误类型: 解析错误或语法错误: (推荐学习:…

    2025年3月5日
    200
  • php调试工具有哪些

    web 开发并不是一项轻松的任务,有超级多服务端脚本语言提供给开发者,但是当前 php 因为具有额外的一些强大的功能而越来越流行。php 是最强大的服务端脚本语言之一,同时也是 web 开发者和设计者用的最多,最经常使用的语言。 PHP 有…

    2025年3月5日
    200

发表回复

登录后才能评论