master

laravel/framework

Last updated at: 29/12/2023 09:20

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;
    }
}