Найти - Пользователи
Полная версия: django + redis
Начало » Django » django + redis
1 2
hound
Добрый день, подскажите как можно использовать redis в проектах django?
Для того чтобы работать с БД redis нужно сначала создать соединение
redis-cli = redis.Redis()
И после этого уже работать с БД, но как и где можно прописать этот коннект к базе, чтобы уже в методах представления не прописывать redis.Redis(), а уже сразу работать с этим курсором?
FishHook
в settings.py ?
hound
FishHook
Прописал в settings.py:
import redis
redis_cli = redis.Redis()

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

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

Suguby27
В сеттингах не нужно никаких курсоров создавать! Сеттинги для хранения констант!
Где-то в коде
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
hound
Suguby27
так, а вот где именно в коде? Если редис будет юзаться часто.
Так сказать, какое “правило хорошего тона” для этого дела?
Как вариант сделать класс, в котором в методе __init__ прописать, что-то вроде:
redis_cli = redis.Redis()

и потом просто смешивать с этим классом классы представлений в модуле отображения?
Suguby27
Там все более обьемно, чем на первый взгляд, читайте https://pypi.python.org/pypi/redis есть поллы соединений.
Вообще создается модуль типа my_redis, в котором есть функция типа get_redis_cursor() все остальные модули её юзают. А как организовать всю работу по соединению с редисом локализовано в my_redis (для начала простой коннект, потом можно будет перепилить на пул). ктт.
hound
Suguby27
Так, а наследоваться от класса где получение курсора активируется не вариант? И если нет, то почему?
Suguby27
А смысл? тогда у тебя в каждом классе-наследнике будет открываться соединение и этим будет трудно управлять (1000 клиентов одновременно зашли, открылось 1000 соединений и у сервера коннекты ёк - как пример).
В случае синглетона (а это в принципе будет он - один обьект на приложение) тебе легче следить и управлять соединениями.
hound
Suguby27
так, а если вынести получение курсора редиса в отдельный модуль, то все равно придется же в каждом классе представления получать этот курсор и значит снова создавать соединение.
Ну вот, например, вынес в отдельный модуль:
import redis
def get_redis_cursor():
    return redis.Redis()

То чем это будет отличаться от наследования класса?
Просьба поправить меня в случае моей ошибки, т.к разобраться с данным вопрос очень хотелось бы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB