Kunci cache Laravel sudah dikunci?
P粉818561682
P粉818561682 2024-03-27 13:28:19
0
1
504

TLDR: Bagaimana untuk menyemak sama ada kunci atom Laravel dikunci tanpa menguncinya dan menyemak nilai pulangan panggilan $lock->get()?

Saya mempunyai berbilang arahan Laravel yang dilaksanakan melalui penjadual. Sesuatu arahan tidak dijadualkan dan jika ia sedang berjalan, tiada arahan lain harus dijalankan. Jadi saya memperkenalkan kunci cache atom dari Laravel seperti ini:

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();
    }
}

Ini berfungsi seperti yang diharapkan, namun, apabila menjalankan berbilang arahan ini secara selari, kadangkala nampaknya kunci telah diperoleh melalui fungsi checkSetupRunning perintah lain dan oleh itu gagal, walaupun arahan persediaan tidak berjalan.

Jadi saya perlukan cara untuk menyemak sama ada kunci telah diperoleh tanpa mengunci kunci. Saya menyemak dokumentasi dan beberapa kod tetapi tidak dapat mencari penyelesaian.

P粉818561682
P粉818561682

membalas semua(1)
P粉604507867

Beginilah kami menemuinya

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

Ia mengembalikan pemilik kunci (tali) jika ada, palsu sebaliknya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan