Управление подключением к 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.
Соединение для каждого пользователя является огромным излишеством, поскольку для каждого подключения необходимо поддерживать открытый сокет. Таким образом, вы автоматически уменьшаете количество, например, которые могут обрабатывать ваш аппарат наполовину.