No puedo encontrar una respuesta a esto mientras busco en Google, pero parece que debería ser algo factible. Estoy recuperando una cadena de conexión de Redis de mi administrador de contraseñas. Me gustaría tomar esta cadena de conexión y pasarla a Redis. Todos los ejemplos que he visto están en el siguiente formato.

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

También he intentado hacer lo siguiente.

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

Que resulta en un error

ConnectionRefusedError: [Errno 111] Conexión rechazada

¿Hay alguna forma de pasar simplemente esta cadena de conexión? Me parece contraproducente tener que recuperarlo y luego dividirlo.

Mi cadena de conexión se ve así después de que se haya recuperado.

xxx.redis.cache.yyy.net:6380,password=redacted,ssl=True,abortConnect=False
0
Dave 5 mar. 2021 a las 22:13

1 respuesta

La mejor respuesta

No tiene una cadena de conexión que admita el cliente Python Redis; esa es una cadena de configuración de .NET StackExchange.Redis. Tendrá que analizar los componentes usted mismo, omitiendo la opción 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)

Tenga en cuenta que lo anterior es un analizador muy simple basado en las opciones que utiliza actualmente. Si es necesario admitir más funciones de configuración de StackExchange.Redis, tendrá que escribir más código para asignarlas a funciones equivalentes de Python Redis (si están disponibles).

Para las URL de cadenas de conexión compatibles , puede utilizar { {X0}} función, o la {{X1 }} método de clase

Devuelve un cliente Redis activo generado a partir de la URL de la base de datos dada.

Tenga en cuenta los esquemas compatibles:

Se admiten tres esquemas de URL:

  • redis:// <http://www.iana.org/assignments/uri-schemes/prov/redis> _ crea una conexión de socket TCP normal
  • rediss:// <http://www.iana.org/assignments/uri-schemes/prov/rediss> _ crea una conexión de socket TCP envuelta en SSL
  • unix:// crea una conexión de socket de dominio Unix

Tenga en cuenta que StrictRedis es solo un alias para la clase redis.client.Redis.

0
Martijn Pieters 5 mar. 2021 a las 19:35