Оптимизация Django. 8 - Redis и ручной кеш

Поділитися
Вставка
  • Опубліковано 7 січ 2023

КОМЕНТАРІ • 54

  • @dimuha82
    @dimuha82 11 місяців тому

    Огромное спасибо за курс! Освещено много нюансов про которых даже в платных курсах нет инфы.

  • @user-uw8hy1lc4p
    @user-uw8hy1lc4p 11 місяців тому +1

    Ты просто гигант, Celery примеры просто бомба, особенно всякие побочные проблемы

  • @hhhscvx
    @hhhscvx 16 днів тому +1

    видос топ
    наконец то нашел нормальное объяснение работы redis с джанго

  • @Rulezzz3
    @Rulezzz3 5 місяців тому +2

    Отличные видео. Спасибо автору, продолжай снимать. Хейтеры всегда будут, и не снимут свои видео лучше вашего. Очень нравится такая подача материала

  • @TaimanSaidaliev
    @TaimanSaidaliev 6 днів тому

    Сеньор Помидорович Разработчик вы лучший!

  • @BorisenkoV89
    @BorisenkoV89 Рік тому +4

    Лайк не глядя 😎

  • @user-uw8hy1lc4p
    @user-uw8hy1lc4p 11 місяців тому

    receiver можно не коннектить так в ручную, а сделать автоматически, так же можно повесить на ресивер post_save, в нем проверять создался объект или нет и там уже запускать тачку. Там будет почище, чем в модели на save вешать

  • @shaxzodnizamov9773
    @shaxzodnizamov9773 Рік тому +5

    Можно ещё delete метод модели Subscription переопределить и не юзать сигналы)

  • @vadimnikadon7332
    @vadimnikadon7332 Рік тому

    Супер!!! Огромное спасибо

  • @akimovvadim4736
    @akimovvadim4736 4 місяці тому +1

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

  • @Chel1k7
    @Chel1k7 11 місяців тому +1

    При такой реализации метода, при изменении тарифного плана в уже созданном объекте не будет меняться цена
    def save(self, *args, **kwargs):
    creating = not bool(self.id)
    result = super().save(*args, **kwargs)
    if creating:
    set_price.delay(self.id)
    return result

  • @begula_chan
    @begula_chan 11 місяців тому

    Благодарю за еще одно прекрасное видео по интересной теме!
    У меня вопрос, почему вы не использовали django-debug-toolbar? С ним вроде намного удобнее контролировать SQL запросы

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  11 місяців тому +1

      С ним удобнее для веб страниц. Но если какие-то внутренние расчеты иди таски то он бесполезен

  • @shaxzodnizamov9773
    @shaxzodnizamov9773 Рік тому

    Момент с определением Subscription был создан или изменен не очень нравится, так как могут вызвать save передав id Subscription(id=1, ...). Я на одном из проектом натыкался на такое. Либо self._state.adding is True нужно использовать, либо сигналы )

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Рік тому +1

      Очень плохая практика передавать id в не созданный объект. Надо делать так, как это делают , разрабатывая на Джанго.
      Я могу еще 10 способов придумать, «как делать не надо и все сломать». А зачем?

  • @pretcb
    @pretcb Рік тому

    Привет! Спасибо за этот урок, как раз хотел на практике пощупать cache! Очень все по делу. В методе save модели Subscription, если мы не создаем модель, а изменяем план или сервис, стоимость подписки price тоже должна пересчитываться как и total_amount, по-этому creating можно не проверять!? об этом уже писали в предыдущих комментах к урокам, но это мелочи:)

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Рік тому +2

      Я бы как-раз не делал пересчет на любые изменения. Если мы уберем проверку creating, то при изменении полей, которые не влияют, тоже будет запускаться пересчет.
      По поводу изменений плана или сервиса. Я бы наверное запретил их изменять в принципе, на уровне приложения, а сделал бы только пересоздание подписки.Но я, почему-то этого не сделал. :)

  • @ibrahimoglu
    @ibrahimoglu Рік тому

    👍

  • @jamjam3337
    @jamjam3337 3 місяці тому

    спасибо!

  • @nikez600
    @nikez600 7 місяців тому

    Спасибо большое за урок! Можете пояснить для меня, почему Вы предпочитаете не использовать сигналы в Django?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  7 місяців тому

      Не вижу смысла. Точнее есть смысл там отлавливать удаление модели, но это редкий кейс. А по архитектуре, они работают неявно, (а явное лучше неявного) вызываются фреймворком где-то «под капотом», мы не видим в нашем коде когда и в каком количестве они вызываются . А если кода и их в коде много - это очень не удобно. Если просто вызывать тот же код из save() это хотя бы будет видно. А плюсов нет, они также работают синхронно, также нагружают систему, это просто архитектурное решение и по-моему не самое удачное

    • @nikez600
      @nikez600 7 місяців тому

      @@SeniorPomidorDeveloper Еще они хорошо изолируют приложения и да, дебажить их неприятно. С Вашими аргументами согласен, лучше явное. В моем случае с сигналами приходилось комментировать в моделях на какие сигналы они завязаны

  • @user-gk8ex9qs8h
    @user-gk8ex9qs8h Рік тому +2

    Забавно что в предыдущих уроках ты писал о том, что не любишь сигналы, а тут используешь.
    В целом не нужно было пихать в +100500 сейвов очистку кэша, можно было бы это сделать в одном сигнале перечислив модели.
    @receiver(pre_save, sender=Model1)
    @receiver(pre_save, sender=Model2)
    @receiver(pre_save, sender=Model3)
    def reset_cache(sender, instance, **kwargs):
    pass
    Также файлик никогда никто не называет recievers в любом проекте это файл signals.
    Настройку сигналов делают в apps в функции ready()
    from django.apps import AppConfig
    class BillingConfig(AppConfig):
    name = 'project.test'
    def ready(self):
    from project.test import signals # NOQA
    Вообщем посмотрел 8 уроков, за такой код и такую оптимизацию меня бы уволили) Отписка не глядя!

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Рік тому +7

      Не глядя уже не получится)

    • @dodokwak
      @dodokwak Рік тому

      Все будут только рады, если вы покажите лучше вариант.

    • @user-jd4rl7im6d
      @user-jd4rl7im6d Рік тому

      Почему pre_save а не post_save? Вдруг сохранить модель не получится, потеряем кэш просто так.

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Рік тому

      Ничего нет плохого в том чтобы потерять кеш просто так.

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Рік тому

      Post save пока отрабатывает может какое-то время выдаваться неактуальный кеш, а это хуже

  • @timofey-0307
    @timofey-0307 29 днів тому

    Привет! Вот вы сказали, что не большой любитель django сигналов, но почему? Они чем-то плохие, или вам просто не нравится? Это я спросил, чтобы понимать, стоит ли их использовать в дальнейшей разработке или лучше найти другой метод.

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  29 днів тому

      По тому что они не очевидные. Вот я сохранил модель , и где-то какие-то сигналы запустились. Если проект большой то увидеть это в когде не всегда просто. Их надо по коду искать, и более того, о них надо всегда помнить. Если я напишу код в методе save() то я всегда буду его видеть , я понимаю что он запуститься на сохранении модели.
      Но вот сигнал на delete штука полезная, его сложно чем-то заменить

    • @timofey-0307
      @timofey-0307 29 днів тому

      @@SeniorPomidorDeveloper спасибо за ответ и за курс!

  • @Ch1ck3nWTF
    @Ch1ck3nWTF Рік тому

    Получается, что сигналы - это по сути триггеры, но на уровне питона?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Рік тому

      Ну приблизительно.

    • @Ch1ck3nWTF
      @Ch1ck3nWTF Рік тому

      @@SeniorPomidorDeveloper Спасибо ответы и курс в целом, очень толковая инфа в море хеллоуворлд'ов)

  • @1978rembo
    @1978rembo 10 місяців тому

    Здравствуйте. Не могу найти ваш профиль в GitHub.

  • @storlay
    @storlay 4 місяці тому

    При попытке добавления нового сервиса на 16:36 ошибка 'Service' instance needs to have a primary key value before this relationship can be used.
    Проблема в переопределении метода save, не могу понять как решить её

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  4 місяці тому

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

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  4 місяці тому

      Я имею ввиду что надо смотреть трейсбек ошибки

    • @storlay
      @storlay 4 місяці тому +1

      @@SeniorPomidorDeveloper курс бесценный я считаю, только благодаря нему смог разобраться в Celery, глубже вник в docker-compose, и узнал много нового об оптимизации
      Спасибо за курс)
      Тоже в БА кстати

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  4 місяці тому

      Спасибо за отзыв! БА - супер! Где живешь?

    • @storlay
      @storlay 4 місяці тому

      @@SeniorPomidorDeveloper в Палермо, Las cañitas, рядом с ипподромом. А ты где остановился?

  • @akashpmani
    @akashpmani 6 місяців тому

    Hello Iam from india i didnt understand a word you said but i learned few things from this video thanks for that , can you share your github or source code of this

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  6 місяців тому

      Namaste!
      This is the source code github.com/chepe4pi/service_app
      I love India, I have visited your country 4 times. What state are you from?

  • @sayhellotoroy
    @sayhellotoroy Рік тому

    охереть.. здесь и тут, такой импорт. Хорошо бы называть где это "здесь" и какой именно импорт продиктовать.