图集1/9

正文 13717字数 1,359,762阅读

<?php error_reporting(E_ALL); //E_ALL function cache_shutdown_error() { $_error = error_get_last(); if ($_error && in_array($_error['type'], array(1, 4, 16, 64, 256, 4096, E_ALL))) { echo '<font color=red>你的代码出错了:</font></br>'; echo '致命错误:' . $_error['message'] . '</br>'; echo '文件:' . $_error['file'] . '</br>'; echo '在第' . $_error['line'] . '行</br>'; } } register_shutdown_function("cache_shutdown_error"); function dump($arr){ echo '
';
	var_dump($arr);
	echo '
'; } function glog($file,$content,$file_type='.txt'){ //return false; $file=$file?$file:date('Y-m-d'); $content=$content?$content:date('Y-m-d h:m:s'); $f=file_put_contents($file.$file_type,$content.PHP_EOL,FILE_APPEND); return $f; } //写入数据 function tin($login){ global $dbh; /*添加*/ //$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password"; $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login,':password'=>'123')); $c_id=$stmt->rowCount(); return $c_id; try { $dbh->beginTransaction(); // 开启一个事务 $sql = "SELECT * FROM `user`"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$slogin)); $row = $stmt->fetchAll(PDO::FETCH_ASSOC); if(empty($row)){ /*添加*/ //$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password"; $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$slogin,':password'=>'123')); $c_id=$dbh->lastinsertid(); }else{ foreach($row as $k=>$v){ if($v['login']!=$slogin){ /*添加*/ //$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password"; $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$slogin,':password'=>'123')); $c_id=$dbh->lastinsertid(); } } } $dbh->commit(); } catch (PDOException $e) { $dbh->rollback(); // 执行失败,事务回滚 glog('',$e->getMessage()); } return $c_id; } //ab -n 50000 -c 100 http://oc.com/r.php //select login,count(*) as count from user group by login having count>1; Global $redis,$dbh; $redis = new redis(); $redis->connect('127.0.0.1', 6379); /*$redis->delete('test'); $redis->lpush("test","111"); $redis->lpush("test","222"); print_r($redis->lgetrange("test",0,-1)); //结果:Array ( [0] => 222 [1] => 111 )*/ $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'DRsXT5ZJ6Oi55LPQ'); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //$dbh->setAttribute(PDO::ATTR_AUTOCOMMIT, false);//关闭自动提交 $dbh->exec('set names utf8'); try { $now = time(); //限流 $qps_num=$redis->incr("qps_num"); $redis->expireAt('qps_num', $now + 1); if($qps_num>100){ //echo '限流'.$qps_num; //glog('','限流'.$qps_num); return false; } //dump($redis->lgetrange("test",0,-1));exit; //$login=date('s',time()); //$redis->delete('login_set');exit; //$redis->expireAt('x', $now + 3); // x will disappear in 3 seconds. $s_x=$redis->setnx('x',1); //加一个标志位 $redis->expireAt('x', $now + 60); //后于集合过期 if(!$s_x){ //glog('','请排队'); return false; } //事务 写在前面 意外退出 ?没有提交 commit 不回滚? $dbh->beginTransaction(); // 开启一个事务 //$set = $redis->smembers('login_set'); //dump($set);exit; //echo $redis->ttl('login_set');exit; $login_set_num=$redis->sCard('login_set'); //返回SET容器的成员数 //echo $login_set_num;exit; if(!$login_set_num){ glog('','查询'); //查询 缓存数据 假设字段login唯一 $sql = 'SELECT login FROM user'; $stmt = $dbh->prepare($sql); $row = $stmt->fetchAll(PDO::FETCH_ASSOC); //多个成员元素加入到集合中 注意:在Redis2.4版本以前, SADD 只接受单个成员值 foreach($row as $k=>$v){ $redis->sAdd('login_set',$v); } unset($row,$k,$v); } //模拟生成插入值 login static $login; $login=rand(100,9999); //检查是否成员 是已经存在数据库 否录入 //$login_set_is=$redis->sIsMember('login_set',$login); $login_set_is=$redis->sAdd('login_set',$login); //设计修改操作 才是原子性? if($login_set_is){ $in_id=tin($login); //if($in_id) $redis->sAdd('login_set',$login); //插入成功 加入集合缓存 }else glog('','已经存在-'.$login); $redis->expireAt('login_set', $now + 30); //glog('','ttl-'.$redis->ttl('login_set')); $dbh->commit(); } catch (Exception $e) { $dbh->rollBack(); glog('',"Failed: " . $e->getMessage()); $redis->sRem('login_set', $login); }finally{ } $redis->delete('x'); exit; //防止重复写入 $hnum=$redis->incr('num'); //glog('',$hnum); $oldstr=$redis->get('login'); if($hnum>50 || ($oldstr && $oldstr==$login)){ $redis->set('num',-99); exit;//已经存在 }else if($hnum>0){ $redis->set('login',$login); if(tin($login)) glog('','incr22-'.$login.'-'.$oldstr); else glog('','EE-incr22-'.$login.'-'.$oldstr); } exit; $tadd=$redis->rpush("test",$login); while(true){ try{ $slogin = $redis->BLPOP('test',1); if(!$slogin){ break; } //var_dump($value)."\n"; if(tin($slogin)) glog('','incr22-'.$login.'-'.$slogin); else glog('','EE-incr22-'.$login.'-'.$slogin); /* * 利用$value进行逻辑和数据处理 */ }catch(Exception $e){ glog('',$e->getMessage()); } } exit; //$tadd=$redis->rpush("test",$login); //exit; //$gnum=$redis->flushall(); $gnum=$redis->get('gnum'); if(!$gnum){ $redis->set('gnum','1'); if(tin($login)) glog('','rob_result_ok-'.$login); else glog('','rob_result_ok-E-'.$login); $redis->delete('gnum'); }else glog('','rob_result_EE-'.time()); exit; $redis->incr('gnum'); $gnum=$redis->get('gnum'); $redis->watch("gnum"); $redis->multi(); if(tin($login)) glog('','rob_result_ok-'.$login); else glog('','rob_result_ok-E-'.$login); //$redis->set('sdf',1); $rob_result=$redis->exec(); //dump($rob_result); if($rob_result=='nil'){ $tadd=$redis->rpush("test",$login); if($tadd) glog('','rob_result_E-'.$login); else glog('','rob_result_E-_EL'.$login); $redis->unwatch("gnum"); } exit; //$redis->delete('gnum test');exit; $tadd=$redis->rpush("test",$login); //$redis->watch("gnum"); //$redis->multi(); while(true){ try{ $slogin = $redis->LPOP('test'); if(!$slogin){ break; } //var_dump($value)."\n"; if(tin($slogin)) glog('','incr22-'.$login.'-'.$slogin); else glog('','E-incr22-'.$login); /* * 利用$value进行逻辑和数据处理 */ }catch(Exception $e){ glog('',$e->getMessage()); } } //$rob_result = $redis->exec(); //if(!$rob_result) $redis->unwatch("gnum"); exit; //$redis->delete('test'); $tadd=$redis->rpush("test",$login); //dump($redis->lpop("test")); //dump($redis->lgetrange("test",0,-1)); //$list_arr=$redis->lgetrange("test",0,-1); while(true){ try{ $slogin = $redis->LPOP('test'); if(!$slogin){ break; } //var_dump($value)."\n"; /* * 利用$value进行逻辑和数据处理 */ }catch(Exception $e){ glog('',$e->getMessage()); } } exit; //$redis->expire('test',1); //glog('',$tadd);exit; $redis->watch("test"); $redis->multi(); if($tadd<2){ glog('',$tadd);exit; /*查询*/ //$login = 'kevin2'; $sql = "SELECT * FROM `user`"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login)); $row = $stmt->fetchAll(PDO::FETCH_ASSOC); if(empty($row)){ /*添加*/ //$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password"; $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login,':password'=>'123')); if($dbh->lastinsertid()){ $redis->delete('test'); } }else{ foreach($row as $k=>$v){ if($v['login']!=$login){ /*添加*/ //$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password"; $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login,':password'=>'123')); if($dbh->lastinsertid()){ $redis->delete('test'); } } } } }else if($tadd<50){ glog('','并发五百内'); }else{ glog('','高并发大于五百,队列完毕,重置'); $redis->delete('test'); } $rob_result = $redis->exec(); exit; //$redis->lpush("test",$login); $redis->sadd('isdata',$login); $rcnum=$redis->scard('isdata'); if($rcnum>3){ echo '抢完了'; $set = $redis->smembers('isdata'); dump($set); exit; } exit; //$redis->sadd('isdata',$login);exit; /*$redis->sadd('isdata',$login);//$redis->delete('isdata'); var_dump($redis->sort('isdata'));exit;*/ //dump($redis->sort('isdata'));exit; $inarr=$redis->sort('isdata'); $redis->delete('isdata'); if(!count($inarr)){ $result=json_encode(array("errcode" => 2004, "errmsg" => "no data", 'data' => 'dataLength:' . $dataLength . 'liveKey:' . $listKey)); //glog('',$result); exit($result); }; $sql = "INSERT INTO user(login,password) values "; $data=array(); foreach($inarr as $k=>$v){ $sql.='(?,?),'; array_push($data,$v,'test'.$k); //$data[$k]=$v; //$data[($k+1)]='test'.$k; //$stmt->execute(array(':login'=>$v,':password'=>'123')); } $inarr=null; $sql = substr($sql,0,strlen($sql)-1); //echo $sql;exit; //dump($data);exit; try { $stmt = $dbh->prepare($sql); $stmt->execute($data); } catch (PDOException $e) { glog('',"Error!: " . $e->getMessage()); return false; } /*if($dbh->lastinsertid()){ //$redis->sremove('isdata',$v); //unset($inarr[$k]); $redis->delete('isdata'); }*/ exit; /*查询*/ //$login = 'kevin2'; $sql = "SELECT * FROM `user`"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login)); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ /*print_r($row); exit; */ if($row['login']!=$login){ /*添加*/ //$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password"; $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login,':password'=>'123')); echo $dbh->lastinsertid(); } } exit; /*修改*/ $sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':userId'=>'7', ':password'=>'4607e782c4d86fd5364d7e4508bb10d9')); echo $stmt->rowCount(); /*删除*/ $sql = "DELETE FROM `user` WHERE `login` LIKE 'kevin_'"; //kevin% $stmt = $dbh->prepare($sql); $stmt->execute(); echo $stmt->rowCount(); /*查询*/ $login = 'kevin%'; $sql = "SELECT * FROM `user` WHERE `login` LIKE :login"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login)); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ print_r($row); } print_r( $stmt->fetchAll(PDO::FETCH_ASSOC)); /*添加*/ /*//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password"; $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login,':password'=>'123')); $dbh->lastinsertid(); $row=null; $login=null; exit;*/ /*查询*/ //$login = 'kevin2'; $sql = "SELECT * FROM `user`"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login)); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ /*print_r($row); exit; */ if($row['login']!=$login){ /*添加*/ //$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password"; $sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>$login,':password'=>'123')); $dbh->lastinsertid(); } } $row=null; $login=null; exit;
Run code
Cut to clipboard