并发其实再小的场景也是会有出现,我们用redis解决一下吧
2020-12-29 本文已影响0人
江江简书
前言:其实在程序的场景再小的流量也会存在并发或者同时操作某几个数据的情况,怎样即高效又便捷的来解决列?那我们下面有请redis的锁机制,在说锁机制时,显得有些高大上,其实就是利用redis set的一个机制来实现的,网上还有很多用lua脚本的,但是我觉得其实不用那么麻烦,php可以直接执行原生的语句,
开始上代码
$red = new Redis();
$red->connect('127.0.0.1',6379);
$red->auth('xxx');
$red->select(6);
$flag = 0;
$res = $red->rawCommand('set', 'lockflag', 'using', 'EX', 20, 'NX');
while (true){
if($res){
echo '设置成功';
//下面是模拟获取锁后其余的操作
sleep(5);
$row = $red->del('name_test_1');
if($row){echo '移除锁成功';};
return;
}else{
sleep(0.5);
$flag++;
}
if($flag == 3){
echo '获取锁失败';
return;
}
}