diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2017-04-26 08:27:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-26 08:27:30 +0200 |
commit | 752b219970bdcbea390dce3500a60fd87e1bbecc (patch) | |
tree | 73a1af4fea03bbaf041d1977a1bf02d749942229 /lib | |
parent | 527369be9c92d7574dbfbd35ab833e6f6b557ba3 (diff) | |
parent | 5da845609dbfa5b0ad53307c382fb665681732d3 (diff) | |
download | nextcloud-server-752b219970bdcbea390dce3500a60fd87e1bbecc.tar.gz nextcloud-server-752b219970bdcbea390dce3500a60fd87e1bbecc.zip |
Merge pull request #4061 from nextcloud/downstream-26407
Redis cluster support
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Memcache/Redis.php | 28 | ||||
-rw-r--r-- | lib/private/RedisFactory.php | 68 |
2 files changed, 59 insertions, 37 deletions
diff --git a/lib/private/Memcache/Redis.php b/lib/private/Memcache/Redis.php index c3184e45856..d423b134f95 100644 --- a/lib/private/Memcache/Redis.php +++ b/lib/private/Memcache/Redis.php @@ -49,8 +49,8 @@ class Redis extends Cache implements IMemcacheTTL { } public function get($key) { - $result = self::$cache->get($this->getNamespace() . $key); - if ($result === false && !self::$cache->exists($this->getNamespace() . $key)) { + $result = self::$cache->get($this->getNameSpace() . $key); + if ($result === false && !self::$cache->exists($this->getNameSpace() . $key)) { return null; } else { return json_decode($result, true); @@ -59,18 +59,18 @@ class Redis extends Cache implements IMemcacheTTL { public function set($key, $value, $ttl = 0) { if ($ttl > 0) { - return self::$cache->setex($this->getNamespace() . $key, $ttl, json_encode($value)); + return self::$cache->setex($this->getNameSpace() . $key, $ttl, json_encode($value)); } else { - return self::$cache->set($this->getNamespace() . $key, json_encode($value)); + return self::$cache->set($this->getNameSpace() . $key, json_encode($value)); } } public function hasKey($key) { - return self::$cache->exists($this->getNamespace() . $key); + return self::$cache->exists($this->getNameSpace() . $key); } public function remove($key) { - if (self::$cache->delete($this->getNamespace() . $key)) { + if (self::$cache->delete($this->getNameSpace() . $key)) { return true; } else { return false; @@ -78,7 +78,7 @@ class Redis extends Cache implements IMemcacheTTL { } public function clear($prefix = '') { - $prefix = $this->getNamespace() . $prefix . '*'; + $prefix = $this->getNameSpace() . $prefix . '*'; $it = null; self::$cache->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY); while ($keys = self::$cache->scan($it, $prefix)) { @@ -111,7 +111,7 @@ class Redis extends Cache implements IMemcacheTTL { * @return int | bool */ public function inc($key, $step = 1) { - return self::$cache->incrBy($this->getNamespace() . $key, $step); + return self::$cache->incrBy($this->getNameSpace() . $key, $step); } /** @@ -125,7 +125,7 @@ class Redis extends Cache implements IMemcacheTTL { if (!$this->hasKey($key)) { return false; } - return self::$cache->decrBy($this->getNamespace() . $key, $step); + return self::$cache->decrBy($this->getNameSpace() . $key, $step); } /** @@ -140,10 +140,10 @@ class Redis extends Cache implements IMemcacheTTL { if (!is_int($new)) { $new = json_encode($new); } - self::$cache->watch($this->getNamespace() . $key); + self::$cache->watch($this->getNameSpace() . $key); if ($this->get($key) === $old) { $result = self::$cache->multi() - ->set($this->getNamespace() . $key, $new) + ->set($this->getNameSpace() . $key, $new) ->exec(); return ($result === false) ? false : true; } @@ -159,10 +159,10 @@ class Redis extends Cache implements IMemcacheTTL { * @return bool */ public function cad($key, $old) { - self::$cache->watch($this->getNamespace() . $key); + self::$cache->watch($this->getNameSpace() . $key); if ($this->get($key) === $old) { $result = self::$cache->multi() - ->del($this->getNamespace() . $key) + ->del($this->getNameSpace() . $key) ->exec(); return ($result === false) ? false : true; } @@ -171,7 +171,7 @@ class Redis extends Cache implements IMemcacheTTL { } public function setTTL($key, $ttl) { - self::$cache->expire($this->getNamespace() . $key, $ttl); + self::$cache->expire($this->getNameSpace() . $key, $ttl); } static public function isAvailable() { diff --git a/lib/private/RedisFactory.php b/lib/private/RedisFactory.php index 3ba637c4142..701e15325c3 100644 --- a/lib/private/RedisFactory.php +++ b/lib/private/RedisFactory.php @@ -39,32 +39,54 @@ class RedisFactory { } private function create() { - $this->instance = new \Redis(); - // TODO allow configuring a RedisArray, see https://github.com/nicolasff/phpredis/blob/master/arrays.markdown#redis-arrays - $config = $this->config->getValue('redis', array()); - if (isset($config['host'])) { - $host = $config['host']; - } else { - $host = '127.0.0.1'; - } - if (isset($config['port'])) { - $port = $config['port']; - } else { - $port = 6379; - } - if (isset($config['timeout'])) { - $timeout = $config['timeout']; + if ($config = $this->config->getValue('redis.cluster', [])) { + if (!class_exists('RedisCluster')) { + throw new \Exception('Redis Cluster support is not available'); + } + // cluster config + if (isset($config['timeout'])) { + $timeout = $config['timeout']; + } else { + $timeout = null; + } + if (isset($config['read_timeout'])) { + $readTimeout = $config['read_timeout']; + } else { + $readTimeout = null; + } + $this->instance = new \RedisCluster(null, $config['seeds'], $timeout, $readTimeout); + + if (isset($config['failover_mode'])) { + $this->instance->setOption(\RedisCluster::OPT_SLAVE_FAILOVER, $config['failover_mode']); + } } else { - $timeout = 0.0; // unlimited - } - $this->instance->connect($host, $port, $timeout); - if (isset($config['password']) && $config['password'] !== '') { - $this->instance->auth($config['password']); - } + $this->instance = new \Redis(); + $config = $this->config->getValue('redis', []); + if (isset($config['host'])) { + $host = $config['host']; + } else { + $host = '127.0.0.1'; + } + if (isset($config['port'])) { + $port = $config['port']; + } else { + $port = 6379; + } + if (isset($config['timeout'])) { + $timeout = $config['timeout']; + } else { + $timeout = 0.0; // unlimited + } + + $this->instance->connect($host, $port, $timeout); + if (isset($config['password']) && $config['password'] !== '') { + $this->instance->auth($config['password']); + } - if (isset($config['dbindex'])) { - $this->instance->select($config['dbindex']); + if (isset($config['dbindex'])) { + $this->instance->select($config['dbindex']); + } } } |