CacheSchedulingMutex.php
TLDR
This file contains the CacheSchedulingMutex
class, which implements the SchedulingMutex
and CacheAware
interfaces. It provides methods to create and check scheduling mutexes using a cache store.
Classes
CacheSchedulingMutex
The CacheSchedulingMutex
class represents a scheduling mutex implementation that uses a cache store. It has the following properties:
-
$cache
: The cache factory implementation. -
$store
: The cache store that should be used.
The class constructor __construct
takes a Cache
object as a parameter and assigns it to the $cache
property.
The class provides the following methods:
-
create(Event $event, DateTimeInterface $time)
: Attempts to obtain a scheduling mutex for the given event and time. It uses the cache store to add a mutex entry with a specified expiration time. -
exists(Event $event, DateTimeInterface $time)
: Determines if a scheduling mutex exists for the given event and time. It checks if the mutex entry exists in the cache store. -
useStore(string $store)
: Specifies the cache store that should be used. It sets the$store
property with the provided store name.
<?php
namespace Illuminate\Console\Scheduling;
use DateTimeInterface;
use Illuminate\Contracts\Cache\Factory as Cache;
class CacheSchedulingMutex implements SchedulingMutex, CacheAware
{
/**
* The cache factory implementation.
*
* @var \Illuminate\Contracts\Cache\Factory
*/
public $cache;
/**
* The cache store that should be used.
*
* @var string|null
*/
public $store;
/**
* Create a new scheduling strategy.
*
* @param \Illuminate\Contracts\Cache\Factory $cache
* @return void
*/
public function __construct(Cache $cache)
{
$this->cache = $cache;
}
/**
* Attempt to obtain a scheduling mutex for the given event.
*
* @param \Illuminate\Console\Scheduling\Event $event
* @param \DateTimeInterface $time
* @return bool
*/
public function create(Event $event, DateTimeInterface $time)
{
return $this->cache->store($this->store)->add(
$event->mutexName().$time->format('Hi'), true, 3600
);
}
/**
* Determine if a scheduling mutex exists for the given event.
*
* @param \Illuminate\Console\Scheduling\Event $event
* @param \DateTimeInterface $time
* @return bool
*/
public function exists(Event $event, DateTimeInterface $time)
{
return $this->cache->store($this->store)->has(
$event->mutexName().$time->format('Hi')
);
}
/**
* Specify the cache store that should be used.
*
* @param string $store
* @return $this
*/
public function useStore($store)
{
$this->store = $store;
return $this;
}
}