Форум сайта python.su
Добрый день, подскажите как можно использовать redis в проектах django?
Для того чтобы работать с БД redis нужно сначала создать соединение
redis-cli = redis.Redis()
Офлайн
в settings.py ?
Офлайн
FishHook
Прописал в settings.py:
import redis redis_cli = redis.Redis()
import settings ------ data = settings.redis_cli.get("rew") ------
Офлайн
Во-первых
import redis REDIS_CLI = redis.Redis()
from django.conf import settings data = settings.REDIS_CLI.get("rew")
Офлайн
В сеттингах не нужно никаких курсоров создавать! Сеттинги для хранения констант!
Где-то в коде
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
Офлайн
Suguby27
так, а вот где именно в коде? Если редис будет юзаться часто.
Так сказать, какое “правило хорошего тона” для этого дела?
Как вариант сделать класс, в котором в методе __init__ прописать, что-то вроде:
redis_cli = redis.Redis()
и потом просто смешивать с этим классом классы представлений в модуле отображения?
Офлайн
Там все более обьемно, чем на первый взгляд, читайте https://pypi.python.org/pypi/redis есть поллы соединений.
Вообще создается модуль типа my_redis, в котором есть функция типа get_redis_cursor() все остальные модули её юзают. А как организовать всю работу по соединению с редисом локализовано в my_redis (для начала простой коннект, потом можно будет перепилить на пул). ктт.
Офлайн
Suguby27
Так, а наследоваться от класса где получение курсора активируется не вариант? И если нет, то почему?
Офлайн
А смысл? тогда у тебя в каждом классе-наследнике будет открываться соединение и этим будет трудно управлять (1000 клиентов одновременно зашли, открылось 1000 соединений и у сервера коннекты ёк - как пример).
В случае синглетона (а это в принципе будет он - один обьект на приложение) тебе легче следить и управлять соединениями.
Отредактировано Suguby27 (Апрель 13, 2015 13:18:46)
Офлайн
Suguby27
так, а если вынести получение курсора редиса в отдельный модуль, то все равно придется же в каждом классе представления получать этот курсор и значит снова создавать соединение.
Ну вот, например, вынес в отдельный модуль:
import redis def get_redis_cursor(): return redis.Redis()
Офлайн