php利用memcached解决瞬时多次提交导致数据判断误差

可防止同一个用户在PHP上一个事件未处理完之前再次提交

//Memcache式悲观锁
    public function beiguansuo(){
        $key=$_COOKIE['PHPSESSID'].'_'.$_SESSION['uid'].'_'.MODULE_NAME.'_'.ACTION_NAME;
        if(!$this->mc()->add($key,1,0,5)){
            $this->error('您的操作过于频繁');die;
        }
    }

memcached提交方向乐观锁:

//Memcache式乐观锁
    public function leguansuo(){
        $key=$_COOKIE['PHPSESSID'].'_'.$_SESSION['uid'].'_'.MODULE_NAME.'_'.ACTION_NAME;
        while (!$this->mc()->add($key,1,0,5)) {
            usleep(500000);//延迟500毫秒
        }
    }
//Memcache式锁_关闭
    public function mc_unlock(){
        $key=$_COOKIE['PHPSESSID'].'_'.$_SESSION['uid'].'_'.MODULE_NAME.'_'.ACTION_NAME;
        $this->mc()->delete($key);
    }

调用例子

public function del_progrm(){
    $this->beiguansuo();//悲观锁上锁
    $ret=1;
    //事件完成前必须解锁
    if($ret){
      M()->commit();
      $this->mc_unlock();//解锁
      $this->success('程序删除成功');
    }else{
      M()->rollback();
      $this->mc_unlock();//解锁
      $this->error('程序删除失败');
    }
  }

你可能感兴趣的:(php,memcached,高并发,数据误差)