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

namespace IlluminateRedis;

use 
Closure;
use 
PredisClient;
use 
IlluminateSupportArr;
use 
IlluminateContractsRedisDatabase as DatabaseContract;

class 
Database implements DatabaseContract
{
    
/**
     * The host address of the database.
     *
     * @var array
     */
    
protected $clients;

    
/**
     * Create a new Redis connection instance.
     *
     * @param  array  $servers
     * @return void
     */
    
public function __construct(array $servers = [])
    {
        
$cluster Arr::pull($servers'cluster');

        
$options = (array) Arr::pull($servers'options');

        if (
$cluster) {
            
$this->clients $this->createAggregateClient($servers$options);
        } else {
            
$this->clients $this->createSingleClients($servers$options);
        }
    }

    
/**
     * Create a new aggregate client supporting sharding.
     *
     * @param  array  $servers
     * @param  array  $options
     * @return array
     */
    
protected function createAggregateClient(array $servers, array $options = [])
    {
        return [
'default' => new Client(array_values($servers), $options)];
    }

    
/**
     * Create an array of single connection clients.
     *
     * @param  array  $servers
     * @param  array  $options
     * @return array
     */
    
protected function createSingleClients(array $servers, array $options = [])
    {
        
$clients = [];

        foreach (
$servers as $key => $server) {
            
$clients[$key] = new Client($server$options);
        }

        return 
$clients;
    }

    
/**
     * Get a specific Redis connection instance.
     *
     * @param  string  $name
     * @return PredisClientInterface|null
     */
    
public function connection($name 'default')
    {
        return 
Arr::get($this->clients$name ?: 'default');
    }

    
/**
     * Run a command against the Redis database.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
    
public function command($method, array $parameters = [])
    {
        return 
call_user_func_array([$this->clients['default'], $method], $parameters);
    }

    
/**
     * Subscribe to a set of given channels for messages.
     *
     * @param  array|string  $channels
     * @param  Closure  $callback
     * @param  string  $connection
     * @param  string  $method
     * @return void
     */
    
public function subscribe($channelsClosure $callback$connection null$method 'subscribe')
    {
        
$loop $this->connection($connection)->pubSubLoop();

        
call_user_func_array([$loop$method], (array) $channels);

        foreach (
$loop as $message) {
            if (
$message->kind === 'message' || $message->kind === 'pmessage') {
                
call_user_func($callback$message->payload$message->channel);
            }
        }

        unset(
$loop);
    }

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

    
/**
     * Dynamically make a Redis command.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
    
public function __call($method$parameters)
    {
        return 
$this->command($method$parameters);
    }
}
Онлайн: 1
Реклама