方法1(针对所有用户,只要被锁,所有用户都无法进入)
<?php
$redis=new \Redis();
$redis->connect('127.0.0.1',6379);
$lockkey='lock_suo';
$lockexpire=300;
$lockvalue=time()+$lockexpire;
$lock=$redis->setnx($lockkey,$lockvalue);
if($lock){
$redis->expire($lockkey, $lockexpire);
for($i=0;$i<5;$i++){
file_put_contents('aa.txt',time().PHP_EOL,FILE_APPEND);
sleep(1);
}
if($redis->ttl($lockkey)){
$redis->del($lockkey);
}
}else{
echo '数据处理中,请不要重复提交';
exit;
}
方法二(针对每一个用户,各个用户互相不受影响)
<?php
$lockkey='bantong_duihuan'.$userId;
$lockexpire=300;
$lockvalue=time()+$lockexpire;
$redis=new \Redis();
$redis->connect("127.0.0.1", 6379);
$lock=$redis->setnx($lockkey,$lockvalue);
if(!empty($lock)||($redis->get($lockkey) < time() && $redis->getSet($lockkey, $lockvalue) < time() )) {
$redis->expire($lockkey, $lockexpire);
test();
if($redis->ttl($lockkey))
$redis->del($lockkey);
$redis->close();
return json(['status'=>1,'msg'=>'执行成功']);
}else{
return json(['status'=>0,'msg'=>'请不要重复提交']);
}