国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Laravel-Cache-Sperre bereits gesperrt?
P粉818561682
P粉818561682 2024-03-27 13:28:19
0
1
659

TLDR: Wie überprüfe ich, ob eine Laravel-Atomsperre gesperrt ist, ohne sie zu sperren und den Rückgabewert des $lock->get()-Aufrufs zu überprüfen?

Ich habe mehrere Laravel-Befehle, die über den Scheduler ausgeführt werden. Ein Befehl ist nicht geplant und wenn er ausgeführt wird, sollten keine anderen Befehle ausgeführt werden. Also habe ich die atomare Cache-Sperre von Laravel wie folgt eingeführt:

private function checkSetupRunning(){
    $lock = Cache::store('locks')->getStore()->lock(
        self::RUNNING_KEY, // name for the lock
        owner: self::class
    );

    if ($lock->get(fn() => null) === false) {
        throw new SetupRunningException();
    }
}

Dies funktioniert wie erwartet. Wenn jedoch mehrere dieser Befehle parallel ausgeführt werden, scheint es manchmal, dass die Sperre über die checkSetupRunning-Funktion eines anderen Befehls erworben wurde und daher fehlschl?gt, obwohl der Setup-Befehl nicht ausgeführt wird.

Ich brauche also eine M?glichkeit, zu überprüfen, ob die Sperre erworben wurde, ohne die Sperre zu sperren. Ich habe die Dokumentation und etwas Code überprüft, konnte aber keine L?sung finden.

P粉818561682
P粉818561682

Antworte allen(1)
P粉604507867

這就是我們找到的方法

 public static function getCacheLockOwner(string $key): string|false
 {
        return Cache::lockConnection()->client()->get(Cache::getPrefix().$key);
 }

如果存在,它將返回鎖所有者(一個字符串),否則返回 false。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage