/** * @param Session $session */ public function set(Session $session) { $redisId = $this->buildKey($session->getSessionId()); if ($session->shouldKill()) { $this->redis->del($redisId); } else { $this->redis->transaction(function (MultiExec $tx) use($session, $redisId) { foreach ($session->getDeletedKeys() as $key) { $tx->hdel($redisId, $key); } $changes = $session->getChanges(); if (count($changes) > 0) { $tx->hmset($redisId, $session->getChanges()); } if ($session->shouldRegenerate()) { $session->setSid(UUID::v4()); $newRedisId = $this->buildKey($session->getSessionId()); $tx->rename($redisId, $newRedisId); $redisId = $newRedisId; } $tx->expire($redisId, $this->getExpires()); }); } }