<?php namespace Illuminate\Cache; use Illuminate\Contracts\Cache\Lock as LockContract; use Illuminate\Contracts\Cache\LockTimeoutException; use Illuminate\Support\InteractsWithTime; use Illuminate\Support\Str; abstract class Lock implements LockContract { use InteractsWithTime; /** * The name of the lock. * * @var string */ protected $name; /** * The number of seconds the lock should be maintained. * * @var int */ protected $seconds; /** * The scope identifier of this lock. * * @var string */ protected $owner; /** * The number of milliseconds to wait before re-attempting to acquire a lock while blocking. * * @var int */ protected $sleepMilliseconds = 250; /** * Create a new lock instance. * * @param string $name * @param int $seconds * @param string|null $owner * @return void */ public function __construct($name, $seconds, $owner = null) { if (is_null($owner)) { $owner = Str::random(); } $this->name = $name; $this->owner = $owner; $this->seconds = $seconds; } /** * Attempt to acquire the lock. * * @return bool */ abstract public function acquire(); /** * Release the lock. * * @return bool */ abstract public function release(); /** * Returns the owner value written into the driver for this lock. * * @return string */ abstract protected function getCurrentOwner(); /** * Attempt to acquire the lock. * * @param callable|null $callback * @return mixed */ public function get($callback = null) { $result = $this->acquire(); if ($result && is_callable($callback)) { try { return $callback(); } finally { $this->release(); } } return $result; } /** * Attempt to acquire the lock for the given number of seconds. * * @param int $seconds * @param callable|null $callback * @return mixed * * @throws \Illuminate\Contracts\Cache\LockTimeoutException */ public function block($seconds, $callback = null) { $starting = $this->currentTime(); while (! $this->acquire()) { usleep($this->sleepMilliseconds * 1000); if ($this->currentTime() - $seconds >= $starting) { throw new LockTimeoutException; } } if (is_callable($callback)) { try { return $callback(); } finally { $this->release(); } } return true; } /** * Returns the current owner of the lock. * * @return string */ public function owner() { return $this->owner; } /** * Determines whether this lock is allowed to release the lock in the driver. * * @return bool */ protected function isOwnedByCurrentProcess() { return $this->getCurrentOwner() === $this->owner; } /** * Specify the number of milliseconds to sleep in between blocked lock acquisition attempts. * * @param int $milliseconds * @return $this */ public function betweenBlockedAttemptsSleepFor($milliseconds) { $this->sleepMilliseconds = $milliseconds; return $this; } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Console | Folder | 0755 |
|
|
Events | Folder | 0755 |
|
|
RateLimiting | Folder | 0755 |
|
|
ApcStore.php | File | 2.53 KB | 0644 |
|
ApcWrapper.php | File | 1.85 KB | 0644 |
|
ArrayLock.php | File | 2.03 KB | 0644 |
|
ArrayStore.php | File | 4.55 KB | 0644 |
|
CacheLock.php | File | 1.79 KB | 0644 |
|
CacheManager.php | File | 10.44 KB | 0644 |
|
CacheServiceProvider.php | File | 1.32 KB | 0644 |
|
DatabaseLock.php | File | 3.52 KB | 0644 |
|
DatabaseStore.php | File | 10.1 KB | 0644 |
|
DynamoDbLock.php | File | 1.56 KB | 0644 |
|
DynamoDbStore.php | File | 14.63 KB | 0644 |
|
FileLock.php | File | 271 B | 0644 |
|
FileStore.php | File | 9 KB | 0644 |
|
HasCacheLock.php | File | 681 B | 0644 |
|
LICENSE.md | File | 1.05 KB | 0644 |
|
Lock.php | File | 3.46 KB | 0644 |
|
LuaScripts.php | File | 462 B | 0644 |
|
MemcachedConnector.php | File | 2.33 KB | 0644 |
|
MemcachedLock.php | File | 1.42 KB | 0644 |
|
MemcachedStore.php | File | 6.18 KB | 0644 |
|
NoLock.php | File | 692 B | 0644 |
|
NullStore.php | File | 2.34 KB | 0644 |
|
PhpRedisLock.php | File | 829 B | 0644 |
|
RateLimiter.php | File | 4.93 KB | 0644 |
|
RedisLock.php | File | 1.75 KB | 0644 |
|
RedisStore.php | File | 9.83 KB | 0644 |
|
RedisTagSet.php | File | 3.07 KB | 0644 |
|
RedisTaggedCache.php | File | 2.8 KB | 0644 |
|
Repository.php | File | 16.67 KB | 0644 |
|
RetrievesMultipleKeys.php | File | 1.13 KB | 0644 |
|
TagSet.php | File | 2.46 KB | 0644 |
|
TaggableStore.php | File | 421 B | 0644 |
|
TaggedCache.php | File | 2.5 KB | 0644 |
|
composer.json | File | 1.49 KB | 0644 |
|