diff --git a/src/RedisConnection.php b/src/RedisConnection.php new file mode 100644 index 0000000..4f5e363 --- /dev/null +++ b/src/RedisConnection.php @@ -0,0 +1,39 @@ +connectionPoolConfiguration + ->get($connectionPoolName) + ->prefix + ; + + $this->redis = $this + ->redisConnectionPoolRepository + ->getConnection($connectionPoolName) + ; + $this->redis->setOption(Redis::OPT_PREFIX, $redisPrefix); + } + + public function __destruct() + { + $this->redisConnectionPoolRepository->putConnection( + $this->connectionPoolName, + $this->redis, + ); + } +} diff --git a/src/Session.php b/src/Session.php index b101100..ff7ec51 100644 --- a/src/Session.php +++ b/src/Session.php @@ -10,41 +10,21 @@ readonly class Session { public Map $data; - private Redis $redis; public function __construct( - RedisConfiguration $redisConfiguration, + private RedisConfiguration $redisConfiguration, private RedisConnectionPoolRepository $redisConnectionPoolRepository, private SerializerInterface $serializer, private SessionConfiguration $sessionConfiguration, public string $id, ) { - $redisPrefix = $redisConfiguration - ->connectionPoolConfiguration - ->get($this->sessionConfiguration->redisConnectionPool) - ->prefix - ; - - $this->redis = $this - ->redisConnectionPoolRepository - ->getConnection($this->sessionConfiguration->redisConnectionPool) - ; - $this->redis->setOption(Redis::OPT_PREFIX, $redisPrefix.'session:'); $this->data = new Map($this->restoreSessionData()); } - public function __destruct() - { - $this->redisConnectionPoolRepository->putConnection( - $this->sessionConfiguration->redisConnectionPool, - $this->redis, - ); - } - public function persist(): void { - $this->redis->set( + $this->getRedisConnection()->set( $this->id, $this->serializer->serialize($this->data->toArray()) ); @@ -52,7 +32,7 @@ public function persist(): void private function getPersistedData(): mixed { - $storedValue = $this->redis->get($this->id); + $storedValue = $this->getRedisConnection()->get($this->id); if (!is_string($storedValue) || empty($storedValue)) { return null; @@ -61,6 +41,23 @@ private function getPersistedData(): mixed return $this->serializer->unserialize($storedValue); } + private function getRedisConnection(): Redis + { + $redisPrefix = $this->redisConfiguration + ->connectionPoolConfiguration + ->get($this->sessionConfiguration->redisConnectionPool) + ->prefix + ; + + $redisConnection = new RedisConnection( + redisConfiguration: $this->redisConfiguration, + redisConnectionPoolRepository: $this->redisConnectionPoolRepository, + redisPrefix: $redisPrefix.'session:', + ); + + return $redisConnection->redis; + } + private function restoreSessionData(): array { $stored = $this->getPersistedData();