Django & Redis: Как правильно использовать пул соединений?
У меня есть сервер Redis, который я запрашиваю почти для каждого представления Django для получения некоторых кэшированных данных. Я прочитал несколько вопросов о stackoverflow и узнал, что создание нового Redis-соединения через r = redis.StrictRedis(host='localhost', port=6379, db=0)
для каждого отдельного веб-запроса является плохим и что я должен использовать пул соединений.
Вот такой подход, который я придумал для объединения пулов в 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: собрал мое понимание о том, почему неправильно открывать новое соединение по каждому запросу из этого qaru.site/info/164690/....
Ответы
Ответ 1
Лучшим подходом было бы настроить redis как ваш бэкэнд кеша Django с приложением Django redis. Он дает вам готовое решение для вашей проблемы, и вы можете использовать официальную библиотеку кеша Django для достижения redis, когда хотите получить или установить кешированную информацию. Вы также можете избежать проблем с совместимостью в своем приложении, если вы решите изменить кеш-память на что-то еще.
Здесь легко следовать учебнику:
Использование Redis в качестве хранилища сеансов Django и кэширования