Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7e2852d

Browse files
alex-vasilchenko-mdfabpot
authored andcommitted
[Cache] added DSN support for rediss in AbstractAdapter and RedisTrait
1 parent bff9e68 commit 7e2852d

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

src/Symfony/Component/Cache/Adapter/AbstractAdapter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public static function createConnection($dsn, array $options = [])
132132
if (!\is_string($dsn)) {
133133
throw new InvalidArgumentException(sprintf('The %s() method expect argument #1 to be string, %s given.', __METHOD__, \gettype($dsn)));
134134
}
135-
if (0 === strpos($dsn, 'redis:')) {
135+
if (0 === strpos($dsn, 'redis:') || 0 === strpos($dsn, 'rediss:')) {
136136
return RedisAdapter::createConnection($dsn, $options);
137137
}
138138
if (0 === strpos($dsn, 'memcached:')) {

src/Symfony/Component/Cache/Tests/Adapter/RedisAdapterTest.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,30 +31,33 @@ public function createCachePool($defaultLifetime = 0)
3131
return $adapter;
3232
}
3333

34-
public function testCreateConnection()
34+
/**
35+
* @dataProvider provideValidSchemes
36+
*/
37+
public function testCreateConnection($dsnScheme)
3538
{
36-
$redis = RedisAdapter::createConnection('redis:?host[h1]&host[h2]&host[/foo:]');
39+
$redis = RedisAdapter::createConnection($dsnScheme.':?host[h1]&host[h2]&host[/foo:]');
3740
$this->assertInstanceOf(\RedisArray::class, $redis);
3841
$this->assertSame(['h1:6379', 'h2:6379', '/foo'], $redis->_hosts());
3942
@$redis = null; // some versions of phpredis connect on destruct, let's silence the warning
4043

4144
$redisHost = getenv('REDIS_HOST');
4245

43-
$redis = RedisAdapter::createConnection('redis://'.$redisHost);
46+
$redis = RedisAdapter::createConnection($dsnScheme.'://'.$redisHost);
4447
$this->assertInstanceOf(\Redis::class, $redis);
4548
$this->assertTrue($redis->isConnected());
4649
$this->assertSame(0, $redis->getDbNum());
4750

48-
$redis = RedisAdapter::createConnection('redis://'.$redisHost.'/2');
51+
$redis = RedisAdapter::createConnection($dsnScheme.'://'.$redisHost.'/2');
4952
$this->assertSame(2, $redis->getDbNum());
5053

51-
$redis = RedisAdapter::createConnection('redis://'.$redisHost, ['timeout' => 3]);
54+
$redis = RedisAdapter::createConnection($dsnScheme.'://'.$redisHost, ['timeout' => 3]);
5255
$this->assertEquals(3, $redis->getTimeout());
5356

54-
$redis = RedisAdapter::createConnection('redis://'.$redisHost.'?timeout=4');
57+
$redis = RedisAdapter::createConnection($dsnScheme.'://'.$redisHost.'?timeout=4');
5558
$this->assertEquals(4, $redis->getTimeout());
5659

57-
$redis = RedisAdapter::createConnection('redis://'.$redisHost, ['read_timeout' => 5]);
60+
$redis = RedisAdapter::createConnection($dsnScheme.'://'.$redisHost, ['read_timeout' => 5]);
5861
$this->assertEquals(5, $redis->getReadTimeout());
5962
}
6063

@@ -87,6 +90,14 @@ public function testInvalidCreateConnection($dsn)
8790
RedisAdapter::createConnection($dsn);
8891
}
8992

93+
public function provideValidSchemes()
94+
{
95+
return [
96+
['redis'],
97+
['rediss'],
98+
];
99+
}
100+
90101
public function provideInvalidCreateConnection()
91102
{
92103
return [

src/Symfony/Component/Cache/Traits/RedisTrait.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,19 @@ private function init($redisClient, $namespace, $defaultLifetime, ?MarshallerInt
8080
*/
8181
public static function createConnection($dsn, array $options = [])
8282
{
83-
if (0 !== strpos($dsn, 'redis:')) {
84-
throw new InvalidArgumentException(sprintf('Invalid Redis DSN: %s does not start with "redis:".', $dsn));
83+
if (0 === strpos($dsn, 'redis:')) {
84+
$scheme = 'redis';
85+
} elseif (0 === strpos($dsn, 'rediss:')) {
86+
$scheme = 'rediss';
87+
} else {
88+
throw new InvalidArgumentException(sprintf('Invalid Redis DSN: %s does not start with "redis:" or "rediss".', $dsn));
8589
}
8690

8791
if (!\extension_loaded('redis') && !class_exists(\Predis\Client::class)) {
8892
throw new CacheException(sprintf('Cannot find the "redis" extension nor the "predis/predis" package: %s', $dsn));
8993
}
9094

91-
$params = preg_replace_callback('#^redis:(//)?(?:(?:[^:@]*+:)?([^@]*+)@)?#', function ($m) use (&$auth) {
95+
$params = preg_replace_callback('#^'.$scheme.':(//)?(?:(?:[^:@]*+:)?([^@]*+)@)?#', function ($m) use (&$auth) {
9296
if (isset($m[2])) {
9397
$auth = $m[2];
9498
}

0 commit comments

Comments
 (0)