我正在使用新的非阻塞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 ....
...
...
}
答案 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;