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

  Рет қаралды 8,931

Senior Pomidor Developer

Senior Pomidor Developer

Жыл бұрын

Пікірлер: 54
@hhhscvx
@hhhscvx 17 күн бұрын
видос топ наконец то нашел нормальное объяснение работы redis с джанго
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 16 күн бұрын
🔥спасибо
@dimuha82
@dimuha82 11 ай бұрын
Огромное спасибо за курс! Освещено много нюансов про которых даже в платных курсах нет инфы.
@user-uw8hy1lc4p
@user-uw8hy1lc4p 11 ай бұрын
Ты просто гигант, Celery примеры просто бомба, особенно всякие побочные проблемы
@TaimanSaidaliev
@TaimanSaidaliev 7 күн бұрын
Сеньор Помидорович Разработчик вы лучший!
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 7 күн бұрын
Спасибо!
@BorisenkoV89
@BorisenkoV89 Жыл бұрын
Лайк не глядя 😎
@Rulezzz3
@Rulezzz3 5 ай бұрын
Отличные видео. Спасибо автору, продолжай снимать. Хейтеры всегда будут, и не снимут свои видео лучше вашего. Очень нравится такая подача материала
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 5 ай бұрын
Спасибо!
@vadimnikadon7332
@vadimnikadon7332 Жыл бұрын
Супер!!! Огромное спасибо
@shaxzodnizamov9773
@shaxzodnizamov9773 Жыл бұрын
Можно ещё delete метод модели Subscription переопределить и не юзать сигналы)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
точно!
@user-uw8hy1lc4p
@user-uw8hy1lc4p 11 ай бұрын
receiver можно не коннектить так в ручную, а сделать автоматически, так же можно повесить на ресивер post_save, в нем проверять создался объект или нет и там уже запускать тачку. Там будет почище, чем в модели на save вешать
@Chel1k7
@Chel1k7 11 ай бұрын
При такой реализации метода, при изменении тарифного плана в уже созданном объекте не будет меняться цена 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 ай бұрын
С ним удобнее для веб страниц. Но если какие-то внутренние расчеты иди таски то он бесполезен
@ibrahimoglu
@ibrahimoglu Жыл бұрын
👍
@jamjam3337
@jamjam3337 3 ай бұрын
спасибо!
@akimovvadim4736
@akimovvadim4736 4 ай бұрын
Хорошие видосы у тебя. Я на четвертной Джанге пробую это все делать, пока не встретил больших проблем из-за различия версий.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 4 ай бұрын
Супер. Это полезная инфа . Спасибо
@pretcb
@pretcb Жыл бұрын
Привет! Спасибо за этот урок, как раз хотел на практике пощупать cache! Очень все по делу. В методе save модели Subscription, если мы не создаем модель, а изменяем план или сервис, стоимость подписки price тоже должна пересчитываться как и total_amount, по-этому creating можно не проверять!? об этом уже писали в предыдущих комментах к урокам, но это мелочи:)
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Я бы как-раз не делал пересчет на любые изменения. Если мы уберем проверку creating, то при изменении полей, которые не влияют, тоже будет запускаться пересчет. По поводу изменений плана или сервиса. Я бы наверное запретил их изменять в принципе, на уровне приложения, а сделал бы только пересоздание подписки.Но я, почему-то этого не сделал. :)
@shaxzodnizamov9773
@shaxzodnizamov9773 Жыл бұрын
Момент с определением Subscription был создан или изменен не очень нравится, так как могут вызвать save передав id Subscription(id=1, ...). Я на одном из проектом натыкался на такое. Либо self._state.adding is True нужно использовать, либо сигналы )
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Очень плохая практика передавать id в не созданный объект. Надо делать так, как это делают , разрабатывая на Джанго. Я могу еще 10 способов придумать, «как делать не надо и все сломать». А зачем?
@nikez600
@nikez600 7 ай бұрын
Спасибо большое за урок! Можете пояснить для меня, почему Вы предпочитаете не использовать сигналы в Django?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 7 ай бұрын
Не вижу смысла. Точнее есть смысл там отлавливать удаление модели, но это редкий кейс. А по архитектуре, они работают неявно, (а явное лучше неявного) вызываются фреймворком где-то «под капотом», мы не видим в нашем коде когда и в каком количестве они вызываются . А если кода и их в коде много - это очень не удобно. Если просто вызывать тот же код из save() это хотя бы будет видно. А плюсов нет, они также работают синхронно, также нагружают систему, это просто архитектурное решение и по-моему не самое удачное
@nikez600
@nikez600 7 ай бұрын
@@SeniorPomidorDeveloper Еще они хорошо изолируют приложения и да, дебажить их неприятно. С Вашими аргументами согласен, лучше явное. В моем случае с сигналами приходилось комментировать в моделях на какие сигналы они завязаны
@timofey-0307
@timofey-0307 29 күн бұрын
Привет! Вот вы сказали, что не большой любитель django сигналов, но почему? Они чем-то плохие, или вам просто не нравится? Это я спросил, чтобы понимать, стоит ли их использовать в дальнейшей разработке или лучше найти другой метод.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 29 күн бұрын
По тому что они не очевидные. Вот я сохранил модель , и где-то какие-то сигналы запустились. Если проект большой то увидеть это в когде не всегда просто. Их надо по коду искать, и более того, о них надо всегда помнить. Если я напишу код в методе save() то я всегда буду его видеть , я понимаю что он запуститься на сохранении модели. Но вот сигнал на delete штука полезная, его сложно чем-то заменить
@timofey-0307
@timofey-0307 29 күн бұрын
@@SeniorPomidorDeveloper спасибо за ответ и за курс!
@1978rembo
@1978rembo 10 ай бұрын
Здравствуйте. Не могу найти ваш профиль в GitHub.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 10 ай бұрын
github.com/chepe4pi/service_app/tree/day-10
@Ch1ck3nWTF
@Ch1ck3nWTF Жыл бұрын
Получается, что сигналы - это по сути триггеры, но на уровне питона?
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Ну приблизительно.
@Ch1ck3nWTF
@Ch1ck3nWTF Жыл бұрын
@@SeniorPomidorDeveloper Спасибо ответы и курс в целом, очень толковая инфа в море хеллоуворлд'ов)
@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 ай бұрын
@@SeniorPomidorDeveloper курс бесценный я считаю, только благодаря нему смог разобраться в Celery, глубже вник в docker-compose, и узнал много нового об оптимизации Спасибо за курс) Тоже в БА кстати
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper 4 ай бұрын
Спасибо за отзыв! БА - супер! Где живешь?
@storlay
@storlay 4 ай бұрын
@@SeniorPomidorDeveloper в Палермо, Las cañitas, рядом с ипподромом. А ты где остановился?
@user-gk8ex9qs8h
@user-gk8ex9qs8h Жыл бұрын
Забавно что в предыдущих уроках ты писал о том, что не любишь сигналы, а тут используешь. В целом не нужно было пихать в +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 Жыл бұрын
Не глядя уже не получится)
@dodokwak
@dodokwak Жыл бұрын
Все будут только рады, если вы покажите лучше вариант.
@user-jd4rl7im6d
@user-jd4rl7im6d Жыл бұрын
Почему pre_save а не post_save? Вдруг сохранить модель не получится, потеряем кэш просто так.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Ничего нет плохого в том чтобы потерять кеш просто так.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Post save пока отрабатывает может какое-то время выдаваться неактуальный кеш, а это хуже
@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 Жыл бұрын
охереть.. здесь и тут, такой импорт. Хорошо бы называть где это "здесь" и какой именно импорт продиктовать.
@SeniorPomidorDeveloper
@SeniorPomidorDeveloper Жыл бұрын
Да я сам охренел, когда переслушал 😁
Оптимизация Django. 9 - DB Индексы
19:11
Senior Pomidor Developer
Рет қаралды 5 М.
Заметили?
00:11
Double Bubble
Рет қаралды 3,3 МЛН
ХОТЯ БЫ КИНОДА 2 - официальный фильм
1:35:34
ХОТЯ БЫ В КИНО
Рет қаралды 2,8 МЛН
Let's Learn Django - Caching with Redis
36:25
Vandad Nahavandipoor
Рет қаралды 15 М.
Оптимизация Django. 1 - Django + Docker
50:08
Senior Pomidor Developer
Рет қаралды 29 М.
Обо мне
9:08
Senior Pomidor Developer
Рет қаралды 9 М.
Redis - Курс по Redis за 100 Секунд
3:08
Bogdan Stashchuk
Рет қаралды 15 М.
Оптимизация Django. 5 - Celery + Docker
30:31
Senior Pomidor Developer
Рет қаралды 13 М.
Зачем нужна база данных Redis и где она используется
13:24
Дмитрий Ченгаев. Веб-разработка.
Рет қаралды 16 М.
Celery + Django - теория  #1
32:38
Django School | Омельченко Михаил
Рет қаралды 47 М.