protected function registerRedisHandler(Application $app)
{
$app['session.handler_factory.backing_redis'] = $app->protect(function ($connections) {
if (class_exists('Redis')) {
$redis = new \Redis();
foreach ($connections as $conn) {
$params = [$conn['path'] ?: $conn['host'], $conn['port'], $conn['timeout'] ?: 0];
call_user_func_array([$redis, $conn['persistant'] ? 'pconnect' : 'connect'], $params);
if (!empty($conn['password'])) {
$redis->auth($conn['password']);
}
if ($conn['database'] > 0) {
$redis->select($conn['database']);
}
if (!empty($conn['prefix'])) {
$redis->setOption(\Redis::OPT_PREFIX, $conn['prefix']);
}
}
} elseif (class_exists('Predis\\Client')) {
$params = [];
$options = [];
foreach ($connections as $conn) {
$params[] = $conn;
if (!empty($conn['prefix'])) {
$options['prefix'] = $conn['prefix'];
}
}
$redis = new \Predis\Client($params, $options);
} else {
throw new \RuntimeException('Neither Redis nor Predis\\Client exist');
}
return $redis;
});
$app['session.handler_factory.redis'] = $app->protect(function ($options) use($app) {
$connections = $this->parseConnections($options, 'localhost', 6379);
$redis = $app['session.handler_factory.backing_redis']($connections);
return new RedisHandler($redis, $options['gc_maxlifetime']);
});
}