Scala-redis客户端连接到Heroku问题上的RedisCloud

时间:2014-07-02 06:12:51

标签: scala heroku redis

我正在使用新的非阻塞redis客户端https://github.com/debasishg/scala-redis连接到Heroku上的Rediscloud DB。 所需的连接字符串是例如以下格式。

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

请注意,它在连接字符串中包含密码字符串。

我的问题是如何根据代码文档使用RedisClient对象提供具有此类签名的密码?

对象RedisClient {

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

隐式refFactory:ActorRefFactory):RedisClient ....

...

...

}

1 个答案:

答案 0 :(得分:2)

查看Redis文档,实际上没有用户名的概念。 AUTH command只需要一个密码。

Scala-redis使用提供的secret参数AUTH使用user:password

do the authentication中,它们提供了如何使用JedisPool(Java Redis库)进行连接的示例。他们可以更好地提及它,但在文档中没有任何地方确实使用Redis URL中的用户名。

在Java示例中,他们只是拆分用户信息组件password,并仅在冒号后面提取第二部分: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) 。用户名永远不会被使用。

回到你关于Scala-redis的问题,你想要的构造函数是:

secret

其中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 } } 是Redis网址的密码组件。

我最终在自己的应用程序中使用了以下内容:

frmStats.ShowModal;
Hide;