php中解决并发插入的方法

很多项目开发中会涉及到并发插入的问题,最近看到一种比较简单的解决办法,也谈不上好坏,原理是差不多的。

主要是利用redis存在一个key唯一的固定值称为锁,每次插入操作前检查锁是否存在,如果存在就等待一会在来执行。如果不存在,开启锁,执行插入操作,操作成功后在释放锁。
一般常用的这种方法的项目,肯定会封装成全局的方法。如: Redis::lock(),Redis::unlock()。
实例如下:

//设置一个唯一的redis存储key
$key = 'xxx';
//设置lock如果成功true,如果已经存在返回false
//第一个参数key,第二个参数过期时间S
$lock = Redis::lock($key, 10);
if (!$lock) {
    throw new ErrorException('当前其他操作正在执行插入,请勿重复操作');
}

//具体的插入操作逻辑

//插入成功,释放锁
Redis:unlock();

前提:要保证代码的插入操作是在同一个地方,service,repository中。不然就需要在不同的地方加锁。

如果你也喜欢旅行可以看下这里,自己的旅行网站,记录我们的一些旅行经历和大家分享,希望你可以喜欢:https://www.lanlianhua.org/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值