public function misoaha(){
$uid=uniqid();
$ Redis =new \Redis();
$redis->connect(' 127.0.0.1 ',6379);
try{
do{
$list =[];
$key='test_key';
$value =uniqid();
$numkey ='storeid'.'11111';
$redis->watch($numkey);
if($redis->hget('www',$uid)){
return ['msg'=>'不能重复'];
}
$is_ lock = $redis->set($key,$value,['nx','ex'=>'10']);
if($is_lock){
$arr[$key] =$value;
$stock = $redis->get($numkey);
if($stock<=0){
if($redis->get($key)==$arr[$key]){
$redis->del($key);
}
return ['msg'=>'结束'];
}
$redis->multi();
$redis->decr($numkey);
$redis->lPush('list',$uid);
$redis->exec();
$redis->hSet('www',$uid,'11111');
if(isset($arr)){
$id = $arr[$key];
}
$script = 'if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del",KEYS[1]) else return 0 end';
//使用 lua 脚本保证原子性
$redis-> eval ($script, [$key, $id], 1);
break;
}else{
usleep (5000);
}
}while(!$is_lock);
return $redis->lLen('list');
}catch (\ Exception $e){
$redis->discard();
return $e->getMessage();
}
}