Merge pull request #7019 from nupplaphil/features/6929-improve_redis

New redis configuration
This commit is contained in:
Hypolite Petovan 2019-04-20 10:24:47 -04:00 committed by GitHub
commit 5cf5274f51
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 46 additions and 6 deletions

View file

@ -343,6 +343,14 @@ return [
// Port number of the redis daemon. // Port number of the redis daemon.
'redis_port' => 6379, 'redis_port' => 6379,
// redis_db (Integer)
// The sub-database of redis (0 - 15 possible sub-databases)
'redis_db' => 0,
// redis_password (String)
// The authentication password for the redis database
'redis_password' => null,
// session_handler (database|cache|native) // session_handler (database|cache|native)
// Whether to use Cache to store session data or to use PHP native session storage. // Whether to use Cache to store session data or to use PHP native session storage.
'session_handler' => 'database', 'session_handler' => 'database',

View file

@ -20,11 +20,13 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
private $redis; private $redis;
/** /**
* @param string $redis_host * @param string $redis_host
* @param int $redis_port * @param int $redis_port
* @param int $redis_db (Default = 0, maximum is 15)
* @param string? $redis_pw
* @throws Exception * @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)) { if (!class_exists('Redis', false)) {
throw new Exception('Redis class isn\'t available'); throw new Exception('Redis class isn\'t available');
@ -35,6 +37,14 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
if (!$this->redis->connect($redis_host, $redis_port)) { if (!$this->redis->connect($redis_host, $redis_port)) {
throw new Exception('Expected Redis server at ' . $redis_host . ':' . $redis_port . ' isn\'t available'); 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);
}
} }
/** /**

View file

@ -2,9 +2,9 @@
namespace Friendica\Factory; namespace Friendica\Factory;
use Friendica\Core\Cache;
use Friendica\Core\Cache\ICacheDriver; use Friendica\Core\Cache\ICacheDriver;
use Friendica\Core\Config; use Friendica\Core\Config;
use Friendica\Core\Cache;
/** /**
* Class CacheDriverFactory * Class CacheDriverFactory
@ -40,8 +40,10 @@ class CacheDriverFactory
case 'redis': case 'redis':
$redis_host = Config::get('system', 'redis_host'); $redis_host = Config::get('system', 'redis_host');
$redis_port = Config::get('system', 'redis_port'); $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; break;
default: default:
return new Cache\DatabaseCacheDriver(); return new Cache\DatabaseCacheDriver();

View file

@ -22,6 +22,16 @@ class RedisCacheDriverTest extends MemoryCacheTest
->with('system', 'redis_port') ->with('system', 'redis_port')
->andReturn(null); ->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'); $this->cache = CacheDriverFactory::create('redis');
return $this->cache; return $this->cache;
} }

View file

@ -3,8 +3,8 @@
namespace Friendica\Test\src\Core\Lock; namespace Friendica\Test\src\Core\Lock;
use Friendica\Factory\CacheDriverFactory;
use Friendica\Core\Lock\CacheLockDriver; use Friendica\Core\Lock\CacheLockDriver;
use Friendica\Factory\CacheDriverFactory;
/** /**
* @requires extension redis * @requires extension redis
@ -23,6 +23,16 @@ class RedisCacheLockDriverTest extends LockTest
->with('system', 'redis_port') ->with('system', 'redis_port')
->andReturn(null); ->andReturn(null);
$this->configMock
->shouldReceive('get')
->with('system', 'redis_db')
->andReturn(3);
$this->configMock
->shouldReceive('get')
->with('system', 'redis_password')
->andReturn(null);
return new CacheLockDriver(CacheDriverFactory::create('redis')); return new CacheLockDriver(CacheDriverFactory::create('redis'));
} }
} }