cache = $cache; } /** * Attempt to acquire a lock for the given job. * * @param mixed $job * @return bool */ public function acquire($job) { $uniqueFor = method_exists($job, 'uniqueFor') ? $job->uniqueFor() : ($this->getAttributeValue($job, UniqueFor::class, 'uniqueFor') ?? 0); $cache = method_exists($job, 'uniqueVia') ? ($job->uniqueVia() ?? $this->cache) : $this->cache; return (bool) $cache->lock(self::getKey($job), $uniqueFor)->get(); } /** * Release the lock for the given job. * * @param mixed $job * @return void */ public function release($job) { $cache = method_exists($job, 'uniqueVia') ? ($job->uniqueVia() ?? $this->cache) : $this->cache; $cache->lock(self::getKey($job))->forceRelease(); } /** * Generate the lock key for the given job. * * @param mixed $job * @return string */ public static function getKey($job) { $uniqueId = method_exists($job, 'uniqueId') ? $job->uniqueId() : ($job->uniqueId ?? ''); $jobName = method_exists($job, 'displayName') ? hash('xxh128', $job->displayName()) : get_class($job); return 'laravel_unique_job:'.$jobName.':'.$uniqueId; } }