primary = $primary; $this->replicas = $replicas; $this->config = $config; $this->log = $this->config->logger; if (empty($this->replicas)) { $this->discoverReplicas(); } $this->setPool(); } /** * Discovers and connects to the replicas from the primary's configuration. * * @return void */ protected function discoverReplicas() { $info = $this->primary->info('replication'); if (! is_array($info)) { throw new ConnectionException('Unable to discover replicas'); } if (! in_array($info['role'], ['primary', 'master'])) { throw new ConnectionException("Replicated primary is a {$info['role']}"); } foreach ($info as $key => $value) { if (strpos((string) $key, 'slave') !== 0) { continue; } $replica = null; if (preg_match('/ip=(?P.*),port=(?P\d+)/', $value, $replica)) { $config = clone $this->config; $config->setHost($replica['host']); $config->setPort((int) $replica['port']); $this->replicas[] = RelayConnector::connectToInstance($config); } } } /** * Returns the primary's node information. * * @return \RedisCachePro\Connections\RelayConnection */ public function primary() { return $this->primary; } /** * Returns the primary's node information. * * @deprecated 1.17.0 * @see \RedisCachePro\Connections\RelayReplicatedConnection::primary() * * @return \RedisCachePro\Connections\RelayConnection */ public function master() { return $this->primary; } /** * Returns the replica nodes information. * * @return \RedisCachePro\Connections\RelayConnection[] */ public function replicas() { return $this->replicas; } }