CacheLock.php
TLDR
This file contains the CacheLock
class, which is responsible for acquiring and releasing locks in the cache. It extends the Lock
class and implements methods such as acquire
, release
, and forceRelease
.
Classes
CacheLock
The CacheLock
class extends the Lock
class and provides functionality for acquiring and releasing locks in the cache. It has the following methods:
-
__construct($store, $name, $seconds, $owner = null)
: Creates a new lock instance. It accepts a cache store implementation, a name for the lock, a duration in seconds, and an optional owner value. -
acquire()
: Attempts to acquire the lock. If the cache store'sadd
method exists and the lock's duration is greater than 0, it adds the lock to the cache store. Otherwise, it checks if the lock already exists in the cache store. If the lock doesn't exist, it puts it in the cache store with the given duration. Returnstrue
if the lock was acquired successfully,false
otherwise. -
release()
: Releases the lock. If the lock is owned by the current process, it removes the lock from the cache store and returnstrue
. Otherwise, it returnsfalse
. -
forceRelease()
: Releases the lock regardless of ownership. It simply removes the lock from the cache store. -
getCurrentOwner()
: Returns the owner value written into the cache store for this lock. It retrieves the value from the cache store using the lock's name.
<?php
namespace Illuminate\Cache;
class CacheLock extends Lock
{
/**
* The cache store implementation.
*
* @var \Illuminate\Contracts\Cache\Store
*/
protected $store;
/**
* Create a new lock instance.
*
* @param \Illuminate\Contracts\Cache\Store $store
* @param string $name
* @param int $seconds
* @param string|null $owner
* @return void
*/
public function __construct($store, $name, $seconds, $owner = null)
{
parent::__construct($name, $seconds, $owner);
$this->store = $store;
}
/**
* Attempt to acquire the lock.
*
* @return bool
*/
public function acquire()
{
if (method_exists($this->store, 'add') && $this->seconds > 0) {
return $this->store->add(
$this->name, $this->owner, $this->seconds
);
}
if (! is_null($this->store->get($this->name))) {
return false;
}
return ($this->seconds > 0)
? $this->store->put($this->name, $this->owner, $this->seconds)
: $this->store->forever($this->name, $this->owner);
}
/**
* Release the lock.
*
* @return bool
*/
public function release()
{
if ($this->isOwnedByCurrentProcess()) {
return $this->store->forget($this->name);
}
return false;
}
/**
* Releases this lock regardless of ownership.
*
* @return void
*/
public function forceRelease()
{
$this->store->forget($this->name);
}
/**
* Returns the owner value written into the driver for this lock.
*
* @return mixed
*/
protected function getCurrentOwner()
{
return $this->store->get($this->name);
}
}