2014-07-02 4 views
1

Я использую новый неблокирующий клиент redis https://github.com/debasishg/scala-redis для подключения к Rediscloud DB на Heroku. Необходимая строка соединения, например, следующего формата.Scala-redis Клиентское соединение с RedisCloud на проблемах Heroku

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

Обратите внимание, что она включает в себя строку пароля в строке подключения.

Мой вопрос: как использовать объект RedisClient для предоставления пароля, который имеет такую ​​подпись, как в коде doc?

объект RedisClient {

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

неявное refFactory: ActorRefFactory): RedisClient ....

......

......

}

+0

Это на самом деле Redis: // rediscloud: << пароль строка здесь >> @ паб-Redis - << номер-порта, здесь >> us-east-1-3.4.ec2.garantiadata.com:. << номер-порта, здесь >>. Предположительно, charadters < and > были поглощены html-рендерером! – user3796391

+0

Вы нашли решение? с этим тоже. – byrnedo

ответ

2

Ознакомившись с документацией Redis, на самом деле нет понятия имени пользователя. AUTH command берет только пароль.

Scala-redis использует предоставленный аргумент secret для do the authentication с использованием AUTH.

В файле Heroku example for Redis Cloud приведен пример подключения JedisPool (библиотека Java Redis). Они могли бы лучше упомянуть об этом, но нигде в документации они фактически не используют имя пользователя из URL Redis.

В примере на Java они просто разделяют компонент информации пользователя user:password и извлекают только вторую часть после двоеточия: password. Имя пользователя никогда не используется.

Возвращаясь к вашему вопросу о Scala-Redis, конструктор вы хотите:

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 это пароль компонент вашего URL Redis.

Я закончил с использованием следующих в моем приложении:

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 
     } 
    } 
Смежные вопросы