Rumah  >  Soal Jawab  >  teks badan

Kunci cache Laravel sudah dikunci?

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粉818561682P粉818561682229 hari yang lalu486

membalas semua(1)saya akan balas

  • P粉604507867

    P粉6045078672024-03-28 12:32:45

    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.

    balas
    0
  • Batalbalas