60 lines
1.6 KiB
PHP
60 lines
1.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
*
|
|
* This file is part of phpFastCache.
|
|
*
|
|
* @license MIT License (MIT)
|
|
*
|
|
* For full copyright and license information, please see the docs/CREDITS.txt file.
|
|
*
|
|
* @author Georges.L (Geolim4) <contact@geolim4.com>
|
|
*
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Phpfastcache\Cluster\Drivers\RandomReplication;
|
|
|
|
use Phpfastcache\Cluster\Drivers\MasterSlaveReplication\MasterSlaveReplicationCluster;
|
|
use Phpfastcache\Core\Pool\ExtendedCacheItemPoolInterface;
|
|
use ReflectionException;
|
|
use ReflectionMethod;
|
|
|
|
|
|
/**
|
|
* Class MasterSlaveReplicationCluster
|
|
* @package Phpfastcache\Cluster\Drivers\MasterSlaveReplication
|
|
*/
|
|
class RandomReplicationCluster extends MasterSlaveReplicationCluster
|
|
{
|
|
/**
|
|
* RandomReplicationCluster constructor.
|
|
* @param string $clusterName
|
|
* @param ExtendedCacheItemPoolInterface ...$driverPools
|
|
* @throws ReflectionException
|
|
*/
|
|
public function __construct(string $clusterName, ExtendedCacheItemPoolInterface ...$driverPools)
|
|
{
|
|
(new ReflectionMethod(\get_parent_class(\get_parent_class($this)), __FUNCTION__))
|
|
->invoke($this, $clusterName, ...$driverPools);
|
|
$randomPool = $driverPools[\random_int(0, \count($driverPools) - 1)];
|
|
|
|
$this->eventManager->dispatch(
|
|
'CacheReplicationRandomPoolChosen',
|
|
$this,
|
|
$randomPool
|
|
);
|
|
|
|
$this->clusterPools = [$randomPool];
|
|
}
|
|
|
|
/**
|
|
* @param callable $operation
|
|
* @return mixed
|
|
*/
|
|
protected function makeOperation(callable $operation)
|
|
{
|
|
return $operation($this->getMasterPool());
|
|
}
|
|
}
|