private $redis;
/**
- * @param string $redis_host
- * @param int $redis_port
+ * @param string $redis_host
+ * @param int $redis_port
+ * @param int $redis_db (Default = 0, maximum is 15)
+ * @param string? $redis_pw
* @throws Exception
*/
- public function __construct($redis_host, $redis_port)
+ public function __construct($redis_host, $redis_port, $redis_db = 0, $redis_pw = null)
{
if (!class_exists('Redis', false)) {
throw new Exception('Redis class isn\'t available');
if (!$this->redis->connect($redis_host, $redis_port)) {
throw new Exception('Expected Redis server at ' . $redis_host . ':' . $redis_port . ' isn\'t available');
}
+
+ if (isset($redis_pw) && !$this->redis->auth($redis_pw)) {
+ throw new Exception('Cannot authenticate redis server at ' . $redis_host . ':' . $redis_port);
+ }
+
+ if ($redis_db !== 0 && !$this->redis->select($redis_db)) {
+ throw new Exception('Cannot switch to redis db ' . $redis_db . ' at ' . $redis_host . ':' . $redis_port);
+ }
}
/**
namespace Friendica\Factory;
+use Friendica\Core\Cache;
use Friendica\Core\Cache\ICacheDriver;
use Friendica\Core\Config;
-use Friendica\Core\Cache;
/**
* Class CacheDriverFactory
case 'redis':
$redis_host = Config::get('system', 'redis_host');
$redis_port = Config::get('system', 'redis_port');
+ $redis_pw = Config::get('system', 'redis_password');
+ $redis_db = Config::get('system', 'redis_db', 0);
- return new Cache\RedisCacheDriver($redis_host, $redis_port);
+ return new Cache\RedisCacheDriver($redis_host, $redis_port, $redis_db, $redis_pw);
break;
default:
return new Cache\DatabaseCacheDriver();
->with('system', 'redis_port')
->andReturn(null);
+ $this->configMock
+ ->shouldReceive('get')
+ ->with('system', 'redis_db')
+ ->andReturn(3);
+
+ $this->configMock
+ ->shouldReceive('get')
+ ->with('system', 'redis_password')
+ ->andReturn(null);
+
$this->cache = CacheDriverFactory::create('redis');
return $this->cache;
}