使用redis中setnx防止并发二次写入
/**
* 使用redis中setnx防止并发二次写入
* @return bool
*/
public function lock()
{
$uid = '110';
$lock_key = 'lock_' . $uid;
$is_lock = Redis::setnx($lock_key, 1); // 加锁
if ($is_lock) { // 获取锁权限
// 程序逻辑处理:
DB::table('test')->insert(['user_name' => '1234']);
// 释放锁
Redis::del($lock_key);
} else {
// 防止死锁
if (Redis::ttl($lock_key) == -1) {
Redis::expire($lock_key, 5);
}
return true; // 获取不到锁权限,直接返回
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: