From 29b7e817a97ee1257d212a17dc39ae7539a1e58b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=93=AD=E6=98=95?= <715557344@qq.com> Date: Sat, 17 Nov 2018 06:06:58 +0800 Subject: [PATCH] fix: Fixed REDIS_DB is not effected when redis reconnected. (#242) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fixed REDIS_DB is not effected when redis reconnected. * 修改切换DB操作统一在createConnection中进行 * 增加重连后,REDIS_DB会失效的BUG --- src/AbstractRedisConnection.php | 4 ---- src/Pool/RedisPool.php | 3 --- src/RedisConnection.php | 4 ++++ src/SyncRedisConnection.php | 4 ++++ test/Cases/PoolTest.php | 13 +++++++++++++ 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/AbstractRedisConnection.php b/src/AbstractRedisConnection.php index a9784f0..2706fbd 100644 --- a/src/AbstractRedisConnection.php +++ b/src/AbstractRedisConnection.php @@ -88,10 +88,6 @@ protected function initRedis() $error = sprintf('Redis connection authentication failed host=%s port=%d auth=%s', $host, (int)$port, (string)$config['auth']); throw new RedisException($error); } - if (isset($config['database']) && $config['database'] < 16 && false === $redis->select($config['database'])) { - $error = sprintf('Redis selection database failure host=%s port=%d database=%d', $host, (int)$port, (int)$config['database']); - throw new RedisException($error); - } return $redis; } diff --git a/src/Pool/RedisPool.php b/src/Pool/RedisPool.php index 14bb74a..96c2bf2 100644 --- a/src/Pool/RedisPool.php +++ b/src/Pool/RedisPool.php @@ -39,9 +39,6 @@ public function createConnection(): ConnectionInterface $redis = new SyncRedisConnection($this); } - $dbIndex = $this->poolConfig->getDb(); - $redis->select($dbIndex); - return $redis; } } diff --git a/src/RedisConnection.php b/src/RedisConnection.php index a2a5aa4..e088de3 100644 --- a/src/RedisConnection.php +++ b/src/RedisConnection.php @@ -33,6 +33,10 @@ public function createConnection() { $redis = $this->initRedis(); $this->connection = $redis; + + /** @var RedisPoolConfig $config */ + $config = $this->getPool()->getPoolConfig(); + $redis->select($config->getDb()); } /** diff --git a/src/SyncRedisConnection.php b/src/SyncRedisConnection.php index 827db2c..90c5290 100644 --- a/src/SyncRedisConnection.php +++ b/src/SyncRedisConnection.php @@ -39,6 +39,10 @@ public function createConnection() $redis->setOption(\Redis::OPT_PREFIX, $prefix); } $this->connection = $redis; + + /** @var RedisPoolConfig $config */ + $config = $this->getPool()->getPoolConfig(); + $redis->select($config->getDb()); } /** diff --git a/test/Cases/PoolTest.php b/test/Cases/PoolTest.php index a72a8cb..5a83516 100644 --- a/test/Cases/PoolTest.php +++ b/test/Cases/PoolTest.php @@ -4,6 +4,7 @@ use Swoft\App; use Swoft\Redis\Exception\RedisException; +use Swoft\Redis\Redis; use SwoftTest\Redis\Pool\RedisEnvPoolConfig; use SwoftTest\Redis\Pool\RedisPptPoolConfig; use SwoftTest\Redis\Testing\Clients\TimeoutRedis; @@ -73,4 +74,16 @@ public function testRedisTimeout() }); } + + public function testRedisReconnectSelectDb() + { + $redis = bean(Redis::class); + $redis->set('test_select_db', 1); + + $redis->reconnect(); + + $res = $redis->get('test_select_db'); + + $this->assertEquals(1, $res); + } } \ No newline at end of file