Skip to content

Commit 6eff588

Browse files
committed
feat: add support for predis scan
1 parent 06ba2ae commit 6eff588

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

src/Factory/PhpredisClientFactory.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ private function createClient(RedisDsn $dsn, string $class, string $alias, array
301301
$client->setOption($class::OPT_PREFIX, $options['prefix']);
302302
}
303303

304+
// Support for scan option since https://github.com/phpredis/phpredis/issues/548
304305
if (isset($options['scan']) && $options['scan'] === 'prefix') {
305306
$client->setOption($class::OPT_SCAN, $class::SCAN_PREFIX);
306307
}

src/Factory/PredisParametersFactory.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use InvalidArgumentException;
88
use Predis\Connection\ParametersInterface;
9+
use Redis;
910
use Snc\RedisBundle\DependencyInjection\Configuration\RedisDsn;
1011

1112
use function array_filter;
@@ -24,8 +25,13 @@ public static function create(array $options, string $class, string $dsn): Param
2425
}
2526

2627
$defaultOptions = ['timeout' => null]; // Allow to be consistent with old version of Predis where default timeout was 5
27-
$dsnOptions = static::parseDsn(new RedisDsn($dsn));
28-
$dsnOptions = array_merge($defaultOptions, $options, $dsnOptions);
28+
29+
if (isset($options['scan']) && $options['scan'] === 'prefix') {
30+
$dsnOptions[Redis::OPT_SCAN] = Redis::SCAN_PREFIX;
31+
}
32+
33+
$dsnOptions = static::parseDsn(new RedisDsn($dsn));
34+
$dsnOptions = array_merge($defaultOptions, $options, $dsnOptions);
2935

3036
if (!empty($dsnOptions['persistent']) && !empty($dsnOptions['database'])) {
3137
$dsnOptions['persistent'] = (int) $dsnOptions['database'];

tests/Factory/PredisParametersFactoryTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,16 @@ public function testCreateException(): void
159159

160160
PredisParametersFactory::create([], stdClass::class, 'redis://localhost');
161161
}
162+
163+
public function testScanOption(): void
164+
{
165+
$dsn = 'redis://localhost:6379';
166+
$options = ['scan' => 'prefix'];
167+
168+
$parameters = PredisParametersFactory::create($options, Parameters::class, $dsn);
169+
170+
$this->assertInstanceOf(Parameters::class, $parameters);
171+
$this->assertArrayHasKey('scan', $parameters->toArray());
172+
$this->assertSame('prefix', $parameters->toArray()['scan']);
173+
}
162174
}

0 commit comments

Comments
 (0)