zoukankan      html  css  js  c++  java
  • PHP+redis乐观锁防止高并发超卖

    <?php
    $error_level = error_reporting(0);
    $con = new mysqli('localhost','root','root','test');
    if(!$con){
        echo "数据库连接失败";
    }
    $sql = "select * from products where id=1";
    
    $result = mysqli_query($con,$sql);
    $aa= mysqli_fetch_row($result);
    if($aa[3]>0){
    
        sleep(1);
    
        $sql = "update products set store=store-1 where id=1";
    
        if(mysqli_query($con,$sql)){
    
            echo "更新成功";
        }
    
    }else{
        echo "没有库存";
    }

    redis乐观锁防止超卖

    <?php
      // ini_set('default_socket_timeout', -1); 
      $redis =new Redis(); 
      $redis->connect("127.0.0.1", 6379);
    
      $redis->watch('sales');//乐观锁 监视作用 set()  初始值0
      $sales=$redis->get('sales'); 
    
      $n=100;
      if($sales>=$n){
        exit('秒杀结束');
      }
      //开启事务
      $redis->multi();
      $redis->incr('sales');  //将 key 中储存的数字值增一 ,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
      $res=$redis->exec(); //成功1 失败0
      if($res){
        //秒杀成功
        include 'db.php';
        $sql="update products set store=store-1 where id=1";
        if($mod->exec($sql)){
          echo "秒杀完成";
        }
      }else{ 
          exit('抢购失败');
      }
  • 相关阅读:
    SQL优化大全
    程序的装入和链接
    Linux系统管理常用命令
    作业、进程、线程
    MySQL优化大全
    Linux系统结构 详解
    NoSQL数据库探讨
    操作系统内存管理——分区、页式、段式管理
    进程调度算法
    操作系统文件管理
  • 原文地址:https://www.cnblogs.com/kangshuai/p/12170013.html
Copyright © 2011-2022 走看看