Heim  >  Artikel  >  PHP-Framework  >  Ausführliche Erklärung zur Verwendung verteilter Redis-Sperren in Laravel (mit Codebeispielen)

Ausführliche Erklärung zur Verwendung verteilter Redis-Sperren in Laravel (mit Codebeispielen)

藏色散人
藏色散人nach vorne
2022-11-06 16:09:091990Durchsuche

In der folgenden Kolumne erfahren Sie, wie Sie Redis Distributed Lock (Atomic Lock Lock Block Release) in Laravel aus der Kolumne „Laravel Tutorial“ verwenden. Ich hoffe, dass es für Freunde hilfreich ist, die es benötigen!

Erstellen Sie eine Sperre

use IlluminateSupportFacadesCache;

$lock = Cache::lock('foo', 10);
if ($lock->get()) {
    // 处理业务逻辑
    sleep(3);
    $lock->release();
}

Erhalten Sie eine unbefristete Sperre und geben Sie sie automatisch frei.

Die Get-Methode kann einen Abschluss empfangen. Nachdem der Abschluss ausgeführt wurde, gibt Laravel die Sperre automatisch frei. [Verwandte Empfehlungen:

Laravel-Video-Tutorial

]

Cache::lock('foo')->get(function () {
    // 获取无限期锁并自动释放...
});

Erwerben Sie die Sperre innerhalb der angegebenen Zeit

use IlluminateContractsCacheLockTimeoutException;

$lock = Cache::lock('foo', 10);
try {
    $lock->block(5);
    echo "5秒时间内成功获取锁...";
} catch (LockTimeoutException $e) {
    echo "5秒时间内获取锁失败...";
} finally {
    optional($lock)->release();
}
oder

Cache::lock('foo', 10)->block(5, function () {
    echo "5秒时间内成功获取锁...";
});

Ignorieren Sie den Besitzer und erzwingen Sie die Freigabe der Sperre

Cache::lock('foo')->forceRelease();

Verwalten Sie Sperren prozessübergreifend

// 控制器中...
$podcast = Podcast::find($id);
$lock = Cache::lock('foo', 120);
if ($result = $lock->get()) {
    ProcessPodcast::dispatch($podcast, $lock->owner());
}

// 队列任务中...
// 使用锁名称和拥有者重新获取锁实例后再释放
Cache::restoreLock('foo', $this->owner)->release();

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zur Verwendung verteilter Redis-Sperren in Laravel (mit Codebeispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen