factor out redis configuration into it's own factorytags/v9.1.0beta1
public function __construct($prefix = '') { | public function __construct($prefix = '') { | ||||
parent::__construct($prefix); | parent::__construct($prefix); | ||||
if (is_null(self::$cache)) { | if (is_null(self::$cache)) { | ||||
// TODO allow configuring a RedisArray, see https://github.com/nicolasff/phpredis/blob/master/arrays.markdown#redis-arrays | |||||
self::$cache = new \Redis(); | |||||
$config = \OC::$server->getSystemConfig()->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']; | |||||
} else { | |||||
$timeout = 0.0; // unlimited | |||||
} | |||||
self::$cache->connect($host, $port, $timeout); | |||||
if(isset($config['password']) && $config['password'] !== '') { | |||||
self::$cache->auth($config['password']); | |||||
} | |||||
if (isset($config['dbindex'])) { | |||||
self::$cache->select($config['dbindex']); | |||||
} | |||||
self::$cache = \OC::$server->getGetRedisFactory()->getInstance(); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
static public function isAvailable() { | static public function isAvailable() { | ||||
return extension_loaded('redis') | |||||
&& version_compare(phpversion('redis'), '2.2.5', '>='); | |||||
return \OC::$server->getGetRedisFactory()->isAvailable(); | |||||
} | } | ||||
} | } | ||||
<?php | |||||
/** | |||||
* @author Robin Appelman <icewind@owncloud.com> | |||||
* | |||||
* @copyright Copyright (c) 2016, ownCloud, Inc. | |||||
* @license AGPL-3.0 | |||||
* | |||||
* This code is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU Affero General Public License, version 3, | |||||
* as published by the Free Software Foundation. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU Affero General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU Affero General Public License, version 3, | |||||
* along with this program. If not, see <http://www.gnu.org/licenses/> | |||||
* | |||||
*/ | |||||
namespace OC; | |||||
class RedisFactory { | |||||
/** @var \Redis */ | |||||
private $instance; | |||||
/** @var SystemConfig */ | |||||
private $config; | |||||
/** | |||||
* RedisFactory constructor. | |||||
* | |||||
* @param SystemConfig $config | |||||
*/ | |||||
public function __construct(SystemConfig $config) { | |||||
$this->config = $config; | |||||
} | |||||
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']; | |||||
} 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']); | |||||
} | |||||
} | |||||
public function getInstance() { | |||||
if (!$this->isAvailable()) { | |||||
throw new \Exception('Redis support is not available'); | |||||
} | |||||
if (!$this->instance instanceof \Redis) { | |||||
$this->create(); | |||||
} | |||||
return $this->instance; | |||||
} | |||||
public function isAvailable() { | |||||
return extension_loaded('redis') | |||||
&& version_compare(phpversion('redis'), '2.2.5', '>='); | |||||
} | |||||
} |
'\\OC\\Memcache\\ArrayCache' | '\\OC\\Memcache\\ArrayCache' | ||||
); | ); | ||||
}); | }); | ||||
$this->registerService('RedisFactory', function (Server $c) { | |||||
$systemConfig = $c->getSystemConfig(); | |||||
return new RedisFactory($systemConfig); | |||||
}); | |||||
$this->registerService('ActivityManager', function (Server $c) { | $this->registerService('ActivityManager', function (Server $c) { | ||||
return new \OC\Activity\Manager( | return new \OC\Activity\Manager( | ||||
$c->getRequest(), | $c->getRequest(), | ||||
return $this->query('MemCacheFactory'); | return $this->query('MemCacheFactory'); | ||||
} | } | ||||
/** | |||||
* Returns an \OC\RedisFactory instance | |||||
* | |||||
* @return \OC\RedisFactory | |||||
*/ | |||||
public function getGetRedisFactory() { | |||||
return $this->query('RedisFactory'); | |||||
} | |||||
/** | /** | ||||
* Returns the current session | * Returns the current session | ||||
* | * |