diff options
-rw-r--r-- | config/config.sample.php | 4 | ||||
-rw-r--r-- | lib/private/RedisFactory.php | 38 |
2 files changed, 24 insertions, 18 deletions
diff --git a/config/config.sample.php b/config/config.sample.php index 6d6f98db602..ca5dd50b7ee 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -1234,7 +1234,7 @@ $CONFIG = [ 'user' => '', // Optional, if not defined no password will be used. 'password' => '', // Optional, if not defined no password will be used. 'dbindex' => 0, // Optional, if undefined SELECT will not run and will use Redis Server's default DB Index. - // If redis is encrypted, provide certificates + // If redis in-transit encryption is enabled, provide certificates // SSL context https://www.php.net/manual/en/context.ssl.php 'ssl_context' => [ 'local_cert' => '/certs/redis.crt', @@ -1278,7 +1278,7 @@ $CONFIG = [ 'failover_mode' => \RedisCluster::FAILOVER_ERROR, 'user' => '', // Optional, if not defined no password will be used. 'password' => '', // Optional, if not defined no password will be used. - // If redis is encrypted, provide certificates + // If redis in-transit encryption is enabled, provide certificates // SSL context https://www.php.net/manual/en/context.ssl.php 'ssl_context' => [ 'local_cert' => '/certs/redis.crt', diff --git a/lib/private/RedisFactory.php b/lib/private/RedisFactory.php index dbac2b58204..7609a75d52d 100644 --- a/lib/private/RedisFactory.php +++ b/lib/private/RedisFactory.php @@ -46,28 +46,29 @@ class RedisFactory { } private function create() { - $isCluster = !empty($this->config->getValue('redis.cluster', [])); - $config = $this->config->getValue('redis', []); + $isCluster = in_array('redis.cluster', $this->config->getKeys()); + $config = $isCluster + ? $this->config->getValue('redis.cluster', []) + : $this->config->getValue('redis', []); - // Init cluster config if any - if ($isCluster) { - if (!class_exists('RedisCluster')) { - throw new \Exception('Redis Cluster support is not available'); - } - // Replace config with the cluster config - $config = $this->config->getValue('redis.cluster', []); + if (empty($config)) { + throw new \Exception('Redis config is empty'); + } + + if ($isCluster && !class_exists('RedisCluster')) { + throw new \Exception('Redis Cluster support is not available'); } if (isset($config['timeout'])) { $timeout = $config['timeout']; } else { - $timeout = null; + $timeout = 0.0; } if (isset($config['read_timeout'])) { $readTimeout = $config['read_timeout']; } else { - $readTimeout = null; + $readTimeout = 0.0; } $auth = null; @@ -85,10 +86,11 @@ class RedisFactory { // cluster config if ($isCluster) { + // Support for older phpredis versions not supporting connectionParameters if ($connectionParameters !== null) { $this->instance = new \RedisCluster(null, $config['seeds'], $timeout, $readTimeout, false, $auth, $connectionParameters); } else { - $this->instance = new \RedisCluster(null, $config['seeds'], $timeout, $readTimeout, $auth); + $this->instance = new \RedisCluster(null, $config['seeds'], $timeout, $readTimeout, false, $auth); } if (isset($config['failover_mode'])) { @@ -111,13 +113,17 @@ class RedisFactory { $port = null; } - if (!empty($connectionParameters)) { + // Support for older phpredis versions not supporting connectionParameters + if ($connectionParameters !== null) { + // Non-clustered redis requires connection parameters to be wrapped inside `stream` $connectionParameters = [ 'stream' => $this->getSslContext($config) ]; + $this->instance->connect($host, $port, $timeout, null, 0, $readTimeout, $connectionParameters); + } else { + $this->instance->connect($host, $port, $timeout, null, 0, $readTimeout); } - $this->instance->connect($host, $port, $timeout, null, 0, $readTimeout, $connectionParameters); // Auth if configured if ($auth !== null) { @@ -134,7 +140,7 @@ class RedisFactory { * Get the ssl context config * * @param Array $config the current config - * @return Array + * @return Array|null * @throws \UnexpectedValueException */ private function getSslContext($config) { @@ -147,7 +153,7 @@ class RedisFactory { } return $config['ssl_context']; } - return []; + return null; } public function getInstance() { |