es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es necesario cerrar una conexión previa de Redis, que fue seguida por un pipeline?

Tengo una función que puede o no realizar múltiples consultas a Redis.

Algunas de estas consultas necesitan valores devueltos de consultas anteriores, por lo que se hacen sin un pipeline:

if action == "comments":
    if redis_connection.exists(key) == 0:
        increment = Comments.objects.filter(user__uuid=uuid).count()
    redis_connection.incrby(f"{uuid}_{comment_uuid}, increment)

Mientras que otras pueden ser llamadas varias veces dentro de la función en un bucle “for”, lo que requiere un pipeline para optimizarlo:

    if redis_connection.exists(user_comment_key) == 0:
        reactions = CommentReactions.objects.filter(comment__uuid=comment_uuid, user__uuid=user_uuid)
    for reaction in reactions:
        with redis_connection.pipeline() as pipe:
            pipe.sadd(user_comment_key, reaction)

Esta llamada al pipeline es donde me confundí. Dado que la estoy llamando dentro de un gestor de contexto (with), ¿se cerrarán todas las demás conexiones también, o debo cerrar cada otra conexión por separado?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como el gestor de contexto maneja la llamada de la tubería, cerrará automáticamente la conexión de la tubería después de que se ejecute el bloque with. Otras conexiones de Redis fuera del bloque with no se verán afectadas y deberán cerrarse por separado si es necesario.

Comments are closed.