Merge pull request #7019 from nupplaphil/features/6929-improve_redis
New redis configuration
This commit is contained in:
commit
5cf5274f51
|
@ -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',
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user