memcache:decrement 秒杀商品库存超卖解决方案(并发)

//memcache存储秒杀商品库存
if($seckill_activity['start_time'] <= time()){
    $this->load->model('seckill_goods_model');
    $sgs = $this->seckill_goods_model->where(array('activity_id'=>$seckill_activity['id']))->find_all();
    if($sgs) {
        $this->load->library('Memcache_extend', 'memcache_extend');
        foreach($sgs as $_sg) {
            $inc_key = 'seckill_inc'.$_sg['activity_id'].$_sg['id'];
            if($this->memcache_extend->get($inc_key) === false) {
                $this->memcache_extend->set($inc_key, $_sg['stock']+1, 86400*7);
            }
        }
    }
}




 //秒杀库存判断
if ($this->app['type'] == APPTYPE_SECKILL) {
    if(isset($order_goods[0]) && $order_goods[0]) {
/*                $lock_key = 'seckill_lock'.$order['activity_id'].$order_goods[0]['id'];
        $this->load->library('Memcache_lock', 'memcache_lock');
        while(!$this->memcache_lock->lock($lock_key, 1, 1))
        {
            usleep(0.5*1000*1000);
        }*/
        $inc_key ='seckill_inc'.$order['activity_id'].$order_goods[0]['id'];
        
        $this->load->library('Memcache_extend', 'memcache_extend');
        if(!$a=$this->memcache_extend->decrement($inc_key, $order_goods[0]['quantity'])) {
            $this->response(array('status'=>FALSE, 'error'=>'库存不够'));
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值