| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <?php
- namespace Illuminate\Redis\Connections;
- use Closure;
- use Illuminate\Contracts\Events\Dispatcher;
- use Illuminate\Redis\Events\CommandExecuted;
- use Illuminate\Redis\Limiters\ConcurrencyLimiterBuilder;
- use Illuminate\Redis\Limiters\DurationLimiterBuilder;
- use Illuminate\Support\Traits\Macroable;
- 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 \Illuminate\Contracts\Events\Dispatcher|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($channels, Closure $callback, $method = 'subscribe');
- /**
- * Funnel a callback for a maximum number of simultaneous executions.
- *
- * @param string $name
- * @return \Illuminate\Redis\Limiters\ConcurrencyLimiterBuilder
- */
- 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 \Illuminate\Redis\Limiters\DurationLimiterBuilder
- */
- 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($channels, Closure $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($channels, Closure $callback)
- {
- $this->createSubscription($channels, $callback, __FUNCTION__);
- }
- /**
- * Run a command against the Redis database.
- *
- * @param string $method
- * @param array $parameters
- * @return mixed
- */
- public function command($method, array $parameters = [])
- {
- $start = microtime(true);
- $result = $this->client->{$method}(...$parameters);
- $time = round((microtime(true) - $start) * 1000, 2);
- $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);
- }
- /**
- * 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 \Illuminate\Contracts\Events\Dispatcher
- */
- public function getEventDispatcher()
- {
- return $this->events;
- }
- /**
- * Set the event dispatcher instance on the connection.
- *
- * @param \Illuminate\Contracts\Events\Dispatcher $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;
- }
- /**
- * 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);
- }
- }
|