Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php
Строк: 299
<?php

namespace IlluminateRedisConnections;

use 
Closure;
use 
IlluminateContractsEventsDispatcher;
use 
IlluminateRedisEventsCommandExecuted;
use 
IlluminateRedisEventsCommandFailed;
use 
IlluminateRedisLimitersConcurrencyLimiterBuilder;
use 
IlluminateRedisLimitersDurationLimiterBuilder;
use 
IlluminateSupportTraitsMacroable;
use 
Throwable;

/**
 * @mixin Redis
 */
abstract class Connection
{
    use 
Macroable {
        
__call as macroCall;
    }

    
/**
     * The Redis client.
     *
     * @var Redis
     */
    
protected $client;

    
/**
     * The Redis connection name.
     *
     * @var string|null
     */
    
protected $name;

    
/**
     * The event dispatcher instance.
     *
     * @var IlluminateContractsEventsDispatcher|null
     */
    
protected $events;

    
/**
     * Subscribe to a set of given channels for messages.
     *
     * @param  array|string  $channels
     * @param  Closure  $callback
     * @param  string  $method
     * @return void
     */
    
abstract public function createSubscription($channelsClosure $callback$method 'subscribe');

    
/**
     * Funnel a callback for a maximum number of simultaneous executions.
     *
     * @param  string  $name
     * @return IlluminateRedisLimitersConcurrencyLimiterBuilder
     */
    
public function funnel($name)
    {
        return new 
ConcurrencyLimiterBuilder($this$name);
    }

    
/**
     * Throttle a callback for a maximum number of executions over a given duration.
     *
     * @param  string  $name
     * @return IlluminateRedisLimitersDurationLimiterBuilder
     */
    
public function throttle($name)
    {
        return new 
DurationLimiterBuilder($this$name);
    }

    
/**
     * Get the underlying Redis client.
     *
     * @return mixed
     */
    
public function client()
    {
        return 
$this->client;
    }

    
/**
     * Subscribe to a set of given channels for messages.
     *
     * @param  array|string  $channels
     * @param  Closure  $callback
     * @return void
     */
    
public function subscribe($channelsClosure $callback)
    {
        
$this->createSubscription($channels$callback__FUNCTION__);
    }

    
/**
     * Subscribe to a set of given channels with wildcards.
     *
     * @param  array|string  $channels
     * @param  Closure  $callback
     * @return void
     */
    
public function psubscribe($channelsClosure $callback)
    {
        
$this->createSubscription($channels$callback__FUNCTION__);
    }

    
/**
     * Run a command against the Redis database.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     *
     * @throws Throwable
     */
    
public function command($method, array $parameters = [])
    {
        
$start microtime(true);

        try {
            
$result $this->client->{$method}(...$parameters);
        } catch (
Throwable $e) {
            
$this->events?->dispatch(new CommandFailed(
                
$method$this->parseParametersForEvent($parameters), $e$this
            
));

            throw 
$e;
        }

        
$time round((microtime(true) - $start) * 10002);

        
$this->events?->dispatch(new CommandExecuted(
            
$method$this->parseParametersForEvent($parameters), $time$this
        
));

        return 
$result;
    }

    
/**
     * Parse the command's parameters for event dispatching.
     *
     * @param  array  $parameters
     * @return array
     */
    
protected function parseParametersForEvent(array $parameters)
    {
        return 
$parameters;
    }

    
/**
     * Fire the given event if possible.
     *
     * @param  mixed  $event
     * @return void
     *
     * @deprecated since Laravel 11.x
     */
    
protected function event($event)
    {
        
$this->events?->dispatch($event);
    }

    
/**
     * Register a Redis command listener with the connection.
     *
     * @param  Closure  $callback
     * @return void
     */
    
public function listen(Closure $callback)
    {
        
$this->events?->listen(CommandExecuted::class, $callback);
    }

    
/**
     * Register a Redis command failure listener with the connection.
     *
     * @param  Closure  $callback
     * @return void
     */
    
public function listenForFailures(Closure $callback)
    {
        
$this->events?->listen(CommandFailed::class, $callback);
    }

    
/**
     * Determine if the connection is a cluster connection.
     *
     * @return bool
     */
    
public function isCluster()
    {
        return 
false;
    }

    
/**
     * Get the connection name.
     *
     * @return string|null
     */
    
public function getName()
    {
        return 
$this->name;
    }

    
/**
     * Set the connection's name.
     *
     * @param  string  $name
     * @return $this
     */
    
public function setName($name)
    {
        
$this->name $name;

        return 
$this;
    }

    
/**
     * Get the event dispatcher used by the connection.
     *
     * @return IlluminateContractsEventsDispatcher|null
     */
    
public function getEventDispatcher()
    {
        return 
$this->events;
    }

    
/**
     * Set the event dispatcher instance on the connection.
     *
     * @param  IlluminateContractsEventsDispatcher  $events
     * @return void
     */
    
public function setEventDispatcher(Dispatcher $events)
    {
        
$this->events $events;
    }

    
/**
     * Unset the event dispatcher instance on the connection.
     *
     * @return void
     */
    
public function unsetEventDispatcher()
    {
        
$this->events null;
    }

    
/**
     * Determine if the given key contains a Redis Cluster hash tag.
     *
     * @param  string  $key
     * @return bool
     */
    
public static function hasHashTag(string $key): bool
    
{
        
$open strpos($key'{');

        if (
$open === false) {
            return 
false;
        }

        
$close strpos($key'}'$open 1);

        return 
$close !== false && $close $open 1;
    }

    
/**
     * Pass other method calls down to the underlying client.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    
public function __call($method$parameters)
    {
        if (static::
hasMacro($method)) {
            return 
$this->macroCall($method$parameters);
        }

        return 
$this->command($method$parameters);
    }
}
Онлайн: 1
Реклама