У меня есть сервер Redis, который я запрашиваю почти в каждом представлении Django для получения некоторых кэшированных данных. Я прочитал несколько вопросов о stackoverflow и узнал, что создание нового соединения Redis через r = redis.StrictRedis(host='localhost', port=6379, db=0)
для каждого отдельного веб-запроса плохое, и что я должен использовать пул соединений.Django & Redis: Как правильно использовать пул соединений?
Вот подход, который я придумал для пула соединений в Django:
В settings.py
так что я могу вытащить его легко в любом виде Django, поскольку это, как глобальная переменная:
# Redis Settings
import redis
REDIS_CONN_POOL_1 = redis.ConnectionPool(host='localhost', port=6379, db=0)
в некоторых views.py
:
from django.conf import settings
REDIS_CONN_POOL_1 = settings.REDIS_POOL_1
r = redis.Redis(connection_pool=REDIS_CONN_POOL_1)
r.get("foobar") # Whatever operation
Итак, мой вопрос: является ли это правильный способ сделать пул соединений в Django? Есть ли какие-то лучшие подходы, которые вы, ребята, используете для тех, кто испытал подобный сценарий? Вероятно, это лучше, чем мой старый подход открытия и закрытия нового соединения redis по каждому запросу.
EDIT: собрал мое понимание о том, почему это неправильно, чтобы открыть новое соединение по каждому запросу от этого stackoverflow question.
Это кажется хорошим решением для одной БД. Любая идея, как указать несколько БД или переключиться между БД при выполнении операций через 'из django.core.cache import cache'? Из того, что я собрал, читал Django redis cache docs, мы можем указать только один БД. – user1757703
Ну, количество БД ограничено в redis до 12. Было бы намного проще использовать ключевые префиксы. Вы можете даже написать свои собственные вспомогательные методы, чтобы их охватить, не возившись много. Почему вам, кстати, нужно размножать БД? – martincpt
Мне нужно несколько БД, потому что я организовываю свои данные в несколько БД на основе типа данных. – user1757703