Несколько постоянных соединений для Django? - PullRequest
2 голосов
/ 02 апреля 2011

Мой сайт использует Django, и теперь я хочу перенести часть логики на Redis, поэтому мне нужно подключение Redis для моего кода views.py, очевидно, я не могу написать соединение с кодом redis в views.py потому что он может вызываться несколько раз, поэтому мне нужно поместить соединение где-то в django, возможно, в промежуточное ПО?

Но я не хочу усложнять, просто там, где подключена база данных MySQL, я хочу добавить глобальный объект для подключения Redis. Возможно позже для подключения XMPP и ZeroMQ.

Как это сделать?

Любая идея приветствуется. Заранее спасибо:)

Ответы [ 3 ]

1 голос
/ 18 февраля 2013

в типичных настройках сервера Django несколько запросов будут обрабатываться одним и тем же рабочим процессом.

Вы можете просто поместить глобальную переменную для хранения соединения поверх views.py и использовать соединение в каждой функции / классе представления, соединение будет установлено при запуске рабочего процесса и закрывается при его повторном использовании. Это полупостоянное соединение, но достаточно хорошее.

MySQL-соединение работает так же в Django. Это не каждое дБ-соединение для каждого запроса, а для каждого рабочего процесса

0 голосов
/ 11 июня 2011

Для этого уже есть отличный код. http://github.com/andymccurdy/redis-py

0 голосов
/ 24 мая 2011

Не очевидно, что вы хотите это сделать. Непонятно, почему вы захотите это сделать.

Так почему бы не подключиться в views.py? Использование единого «глобального соединения» будет означать добавление кода блокировки / сериализации, чтобы обеспечить безопасное использование вашего соединения среди множества вызовов ваших представлений. На самом деле я создаю и подключаюсь прямо в методе в моих различных и разных файлах views.py. Иногда я подключаюсь к тому или иному экземпляру. Я не видел проблем с производительностью, а также не должен беспокоиться о безопасности параллелизма. Я позволил Редису понять это.

Другим аспектом глобального общего подключения является снижение производительности - у вас будет один просмотр страницы, ожидающий завершения другого, прежде чем он сможет работать. Позволяя каждому иметь свое собственное соединение, вы избегаете замедления одного представления другим при ожидании доступа к глобальному соединителю.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...