Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 10, 2015 10:39:02

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

django + redis

Добрый день, подскажите как можно использовать redis в проектах django?
Для того чтобы работать с БД redis нужно сначала создать соединение

redis-cli = redis.Redis()
И после этого уже работать с БД, но как и где можно прописать этот коннект к базе, чтобы уже в методах представления не прописывать redis.Redis(), а уже сразу работать с этим курсором?

Офлайн

#2 Апрель 10, 2015 10:45:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

django + redis

в settings.py ?



Офлайн

#3 Апрель 10, 2015 10:52:46

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

django + redis

FishHook
Прописал в settings.py:

import redis
redis_cli = redis.Redis()

В функции представлении пытаюсь вызвать его:
import settings
------
     data = settings.redis_cli.get("rew")
------
Ругается:
'module' object has no attribute ‘redis_cli’

Офлайн

#4 Апрель 10, 2015 11:20:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

django + redis

Во-первых

import redis
REDIS_CLI = redis.Redis()

Во-вторых
from django.conf import settings
data = settings.REDIS_CLI.get("rew")



Офлайн

#5 Апрель 10, 2015 12:31:32

Suguby27
Зарегистрирован: 2015-04-07
Сообщения: 26
Репутация: +  4  -
Профиль   Отправить e-mail  

django + redis

В сеттингах не нужно никаких курсоров создавать! Сеттинги для хранения констант!
Где-то в коде

from redis import Redis
redis = Redis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=settings.REDIS_DB)
в сеттингах
REDIS_PORT = 6379
REDIS_HOST = "127.0.0.1"
REDIS_DB = 0

Офлайн

#6 Апрель 10, 2015 12:33:52

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

django + redis

Suguby27
так, а вот где именно в коде? Если редис будет юзаться часто.
Так сказать, какое “правило хорошего тона” для этого дела?
Как вариант сделать класс, в котором в методе __init__ прописать, что-то вроде:
redis_cli = redis.Redis()

и потом просто смешивать с этим классом классы представлений в модуле отображения?

Офлайн

#7 Апрель 10, 2015 13:47:14

Suguby27
Зарегистрирован: 2015-04-07
Сообщения: 26
Репутация: +  4  -
Профиль   Отправить e-mail  

django + redis

Там все более обьемно, чем на первый взгляд, читайте https://pypi.python.org/pypi/redis есть поллы соединений.
Вообще создается модуль типа my_redis, в котором есть функция типа get_redis_cursor() все остальные модули её юзают. А как организовать всю работу по соединению с редисом локализовано в my_redis (для начала простой коннект, потом можно будет перепилить на пул). ктт.

Офлайн

#8 Апрель 10, 2015 22:47:24

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

django + redis

Suguby27
Так, а наследоваться от класса где получение курсора активируется не вариант? И если нет, то почему?

Офлайн

#9 Апрель 13, 2015 11:50:22

Suguby27
Зарегистрирован: 2015-04-07
Сообщения: 26
Репутация: +  4  -
Профиль   Отправить e-mail  

django + redis

А смысл? тогда у тебя в каждом классе-наследнике будет открываться соединение и этим будет трудно управлять (1000 клиентов одновременно зашли, открылось 1000 соединений и у сервера коннекты ёк - как пример).
В случае синглетона (а это в принципе будет он - один обьект на приложение) тебе легче следить и управлять соединениями.

Отредактировано Suguby27 (Апрель 13, 2015 13:18:46)

Офлайн

#10 Апрель 13, 2015 22:27:30

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

django + redis

Suguby27
так, а если вынести получение курсора редиса в отдельный модуль, то все равно придется же в каждом классе представления получать этот курсор и значит снова создавать соединение.
Ну вот, например, вынес в отдельный модуль:

import redis
def get_redis_cursor():
    return redis.Redis()

То чем это будет отличаться от наследования класса?
Просьба поправить меня в случае моей ошибки, т.к разобраться с данным вопрос очень хотелось бы.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version