首页 > 解决方案 > 是否可以在 python 中将连接字符串传递给 StrictRedis?

问题描述

在谷歌搜索时我无法找到答案,但似乎它应该是可行的。我正在从我的密码管理器中检索 Redis 连接字符串。我想把这个连接字符串传递给 Redis。我看到的所有例子都采用以下格式。

redis.StrictRedis(host=myHostname, port=6380, password=myPassword, ssl=True)

我也尝试过执行以下操作。

r = redis.StrictRedis()
r.ConnectionString = myConnectionString 

这会导致错误

ConnectionRefusedError: [Errno 111] 连接被拒绝

有没有办法简单地传递这个连接字符串?对我来说似乎适得其反,必须将其取回然后将其拆分。

我的连接字符串被检索后看起来像这样。

xxx.redis.cache.yyy.net:6380,password=redacted,ssl=True,abortConnect=False

标签: python-3.xredis

解决方案


您没有 Python Redis 客户端支持的连接字符串;那是一个.NET StackExchange.Redis 配置字符串。您必须自己解析组件,跳过该abortConnection选项:

hostport, *options = myConnectionString.split(",")
host, _, port = hostport.partition(":")
arguments = {}
for option in options:
    opt, _, value = option.partition("=")
    if opt == "port":
        value = int(value)
    elif opt == "ssl":
        value = value.lower() == "true"
    elif opt == "abortConnect":
        continue
    arguments[opt] = value

client = redis.Redis(host, port=int(port), **arguments)

请注意,以上是基于您当前使用的选项的非常简单的解析器。如果需要支持更多 StackExchange.Redis 配置功能,则必须编写更多代码以将它们映射到等效的 Python Redis 功能(如果可用)。

对于支持的连接字符串 URL,您可以使用redis.from_url()函数Redis.from_url()类方法

返回从给定数据库 URL 生成的活动 Redis 客户端。

注意支持的方案:

支持三种 URL 方案:

  • redis:// <http://www.iana.org/assignments/uri-schemes/prov/redis>_ 创建一个普通的 TCP 套接字连接
  • rediss:// <http://www.iana.org/assignments/uri-schemes/prov/rediss>_ 创建一个 SSL 包装的 TCP 套接字连接
  • unix://创建一个 Unix 域套接字连接

请注意,这StrictRedis只是redis.client.Redis该类的别名。


推荐阅读