Управление подключением к redis из Python

Я использую redis-py в моем приложении python для хранения простых переменных или списков переменных в базе данных Redis, поэтому я подумал, что было бы лучше создать соединение с сервером redis каждый раз, когда мне нужно сохранить или получить переменная, так как это выполняется не очень часто и не требуется иметь постоянное соединение, которое может привести к таймауту.

Прочитав некоторые базовые учебники, я создал соединения с использованием класса Redis, но не нашел способ закрыть соединение, так как это первый раз, когда я использую Redis. Я не уверен, использую ли я лучший подход для управления соединениями, поэтому мне бы хотелось получить некоторые советы для этого. Вот как я теперь set ting или get ting переменная:

import redis

def getVariable(variable_name):
    my_server = redis.Redis("10.0.0.1")
    response = my_server.get(variable_name)
    return response

def setVariable(variable_name, variable_value):
    my_server = redis.Redis("10.0.0.1")
    my_server.set(variable_name, variable_value)

В основном я использую этот код для хранения последнего времени соединения или для получения среднего количества запросов в секунду для моего приложения и т.д.

Спасибо за ваш совет.

Ответы

Ответ 1

Python использует механизм счетного счетчика для работы с объектами, поэтому в конце блоков объект my_server будет автоматически уничтожен и соединение будет закрыто. Вам не нужно закрывать его явно.

Теперь вы не должны управлять соединениями Redis. Подключение/отключение для каждой операции слишком дорого, поэтому гораздо лучше поддерживать открытое соединение. С redis-py это можно сделать, объявив пул соединений:

import redis

POOL = redis.ConnectionPool(host='10.0.0.1', port=6379, db=0)

def getVariable(variable_name):
    my_server = redis.Redis(connection_pool=POOL)
    response = my_server.get(variable_name)
    return response

def setVariable(variable_name, variable_value):
    my_server = redis.Redis(connection_pool=POOL)
    my_server.set(variable_name, variable_value)

Обратите внимание, что управление пулом соединений в основном автоматическое и выполняется внутри redis-py.

Ответ 2

@sg1990 Что делать, если у вас 10 000 пользователей, которым требуется redis одновременно? Они не могут использовать одно соединение, и вы только что создали себе узкое место.

С пулом соединений вы можете создать произвольное количество подключений и просто использовать get_connection() и release(), из redis-py docs.

Соединение для каждого пользователя является огромным излишеством, поскольку для каждого подключения необходимо поддерживать открытый сокет. Таким образом, вы автоматически уменьшаете количество, например, которые могут обрабатывать ваш аппарат наполовину.