2014-12-10 3 views
18

У меня есть сервер 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.

ответ

1

Лучше был бы настройки Redis в качестве бэкэндов вашего Джанго с Django redis cache приложением. Он дает вам готовое решение для вашей проблемы, и вы можете использовать официальную библиотеку кеша Django для достижения redis, когда хотите получить или установить кешированную информацию. Вы также можете избежать проблем с совместимостью в своем приложении, если вы решите изменить кеш-память на что-то еще.

Вот легко следовать учебник:

Using Redis as Django's session store and cache backend

+0

Это кажется хорошим решением для одной БД. Любая идея, как указать несколько БД или переключиться между БД при выполнении операций через 'из django.core.cache import cache'? Из того, что я собрал, читал Django redis cache docs, мы можем указать только один БД. – user1757703

+0

Ну, количество БД ограничено в redis до 12. Было бы намного проще использовать ключевые префиксы. Вы можете даже написать свои собственные вспомогательные методы, чтобы их охватить, не возившись много. Почему вам, кстати, нужно размножать БД? – martincpt

+0

Мне нужно несколько БД, потому что я организовываю свои данные в несколько БД на основе типа данных. – user1757703

Смежные вопросы