在 php 中,可以使用 redis 实现加锁的机制来保护共享资源的互斥访问。下面是一个使用php redis扩展实现加锁的示例:
$redis = new \Redis();
// 连接到 Redis 服务器
$redis->connect('127.0.0.1', 6379);
// 锁的名称和超时时间
$lockKey = 'my_lock';
$timeout = 5;
// 尝试获取锁
$isLock = false;
while (!$isLock) {
//使用NX指定只有在锁不存在的情况下才会设置成功,并使用EX设置锁的过期时间
$isLock= $redis->set($lockKey, 1, ['NX', 'EX' => $timeout]);
//还有另一种写法基于predis的 $redis->set($lockKey, 1, 'EX', 10, 'NX']);
if ($isLock) {
try {
// 成功获取锁,执行需要的代码
// ...
} cache () {
//捕捉异常
} finally {
// 无论如何都要主动释放锁
$redis->del($lockKey);
}
} else {
// 未能获取锁,等待一段时间后重试
sleep(3);
}
}