Maison  >  Article  >  cadre php  >  Explication détaillée de la façon d'utiliser les verrous distribués Redis dans Laravel (avec des exemples de code)

Explication détaillée de la façon d'utiliser les verrous distribués Redis dans Laravel (avec des exemples de code)

藏色散人
藏色散人avant
2022-11-06 16:09:091980parcourir

La colonne Tutoriel Laravel suivante vous présentera comment utiliser le verrouillage distribué Redis (libération de bloc de verrouillage atomique) dans Laravel. J'espère que cela sera utile aux amis dans le besoin !

Créez un verrou

use IlluminateSupportFacadesCache;

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

Obtenez un verrou indéfini et libérez-le automatiquement

La méthode get peut recevoir une fermeture. Une fois la fermeture exécutée, Laravel libérera automatiquement le verrou. [Recommandations associées : tutoriel vidéo laravel]

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

Acquérir le verrou dans le délai spécifié

use IlluminateContractsCacheLockTimeoutException;

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

ou

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

Ignorer le propriétaire et forcer le déverrouillage

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

Gérer les verrous à travers les processus

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer