2014-07-02 4 views
1

J'utilise le nouveau client Redis non bloquant https://github.com/debasishg/scala-redis pour me connecter à Rediscloud DB sur Heroku. La chaîne de connexion requise est par exemple de format suivant.Scala-redis Connexion client à RedisCloud sur les problèmes Heroku

Redis: // rediscloud: @ pub-redis-.us-east-1-3.4.ec2.garantiadata.com:

Notez qu'il comprend une chaîne de mot de passe dans la chaîne de connexion.

Ma question est comment utiliser l'objet RedisClient pour fournir le mot de passe qui a la signature comme ceci selon le code doc?

objet RedisClient {

def apply(host: String, port: Int = 6379, name: String = defaultName, 
     settings: RedisClientSettings = RedisClientSettings())(

refFactory implicite: ActorRefFactory): RedisClient ....

......

......

}

+0

Il est en fait Redis: // rediscloud: << mot de passe-chaîne ici >> @ pub-Redis - << port-number-ici >>. us-east-1-3.4.ec2.garantiadata.com: << numéro de port-ici >>. Les charadters < and > ont été englouties par le moteur de rendu html je suppose! – user3796391

+0

avez-vous trouvé une solution? face à cela aussi. – byrnedo

Répondre

2

En regardant la documentation de Redis, il n'y a actuellement aucun concept de nom d'utilisateur. Le AUTH command ne prend qu'un mot de passe. Scala-redis utilise l'argument fourni secret pour do the authentication en utilisant AUTH.

Dans le Heroku example for Redis Cloud, ils fournissent un exemple de connexion à l'aide de JedisPool (une bibliothèque Java Redis). Ils pourraient faire un meilleur travail de mention, mais nulle part dans la documentation, ils utilisent réellement le nom d'utilisateur de l'URL Redis.

Dans l'exemple de Java, ils divisent simplement le composant d'informations utilisateur user:password et extraient uniquement la deuxième partie après le signe deux-points: password. Le nom d'utilisateur n'est jamais utilisé.

Pour en revenir à votre question sur Scala-Redis, le constructeur que vous voulez est:

RedisClient(override val host: String, override val port: Int, 
    override val database: Int = 0, override val secret: Option[Any] = None, override val timeout : Int = 0) 

secret est le composant de mot de passe de votre URL Redis.

Je fini par utiliser ce qui suit dans ma propre application:

val redisClient = Properties.envOrNone("REDISCLOUD_URL") match { 
     case Some(redisUrl) => { 
     val redisUri = new URI(redisUrl) 
     val host = redisUri.getHost() 
     val port = redisUri.getPort() 
     val secret = Try(redisUri.getUserInfo().split(":",2).last).toOption 
     new RedisClient(host, port, secret = secret) 
     } 
     case _ => { 
      // Deal with missing configuration here 
     } 
    } 
Questions connexes