zoukankan      html  css  js  c++  java
  • php redis实现在高并发下防止库存超卖解决方案

    php redis实现在高并发下防止库存超卖解决方案

    我直接用set get来实现 毕竟他速度最快。。

    $prize_id=2;
    //读取库存 如果缓存没数据那就先读取数据库 里面也实现了分布式锁
    
    $sql='select prizecount from dsfs_prizelimit where id=?';
    $key='prizeid'.$prize_id;
    $prizecount=$this->getcacheinfo($sql,array($prize_id),$key,-1)[0]['prizecount'];
    //如果没有库存了
    if($prizecount<=0){
    exit();
    }
    //实现购买逻辑
    //库存减去1 这个地方要注意 mysql事务成功后再去执行redis
    $redis->set($key,$prizecount-1);
    
     

    ps: 进入购买逻辑 如果购买失败 redis库存还是要减去的

    上面代码看的出来如果在高并发下明显力不从心     

    所以要让代码进化下 用redis 分段加锁 另外1redis 生成2个redis   

    直接把库存读取出来 比如100

    分成2个就是除以2

    $redis->set('ss1',50);

     $redis->set('ss2',50);

    然后随机读取就行

    不过上面代码只能加快了判断速度判断库存速度  下面购买逻辑速度还是一样

  • 相关阅读:
    ribbon--eureka注册中心消费者
    eureka注册中心
    spring cloud简介
    Quartz定时任务
    ThreadLocal
    分布式单点登录SSO
    dubbo框架
    注册中心
    centos安装zookeeper及搭建集群
    7.19 基础数据结构选讲
  • 原文地址:https://www.cnblogs.com/newmiracle/p/13913576.html
Copyright © 2011-2022 走看看