- 使用Redis的setnx可以实现一个分布式锁
//加redis锁
$token_operation = Uuid::uuid1();
$lock_operation_name = "redis_lock" . $user->id;
$lock_operation = Redis::set($lock_operation_name, $token_operation, "nx", "ex", 5);
$script_operation = '
if redis.call("get",KEYS[1]) == ARGV[1]
then
return redis.call("del",KEYS[1])
else
return 0
end
';
if ($lock_operation) {
//todo something
// 释放锁
Redis::eval($script_operation, '1', $lock_operation_name, $token_operation);
}