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. p>
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.
Beginilah kami menemuinya
Ia mengembalikan pemilik kunci (tali) jika ada, palsu sebaliknya.