Продвинутый Django 5 для продолжающих

Прогресс по курсу:  0/193

8.8 Redis + Django Channel
1 из 1 шага пройден

Слои каналов позволяют общаться между различными экземплярами приложения. Они являются полезной частью создания распределенного приложения в режиме реального времени, если вы не хотите передавать все свои сообщения или события через базу данных.

На данный момент, наши каналы работают со слоем каналов в памяти. Этот слой может быть полезен при тестировании или для целей локальной разработки. 

Но канальные слои InMemory работают с каждым процессом как с отдельным слоем. Это означает, что межпроцессный обмен сообщениями невозможен.

Поскольку основная ценность канальных слоев заключается в обеспечении распределенного обмена сообщениями, использование InMemory приведет к неоптимальной производительности и, в конечном счете, к потере данных в многоэкземплярной среде.

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer"
    }
}


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

Redis предоставляет такие структуры данных, как строки, хэши, списки, наборы, отсортированные наборы с запросами диапазона, растровыми изображениями, гиперлогами, геопространственными индексами и потоками.

Redis имеет встроенную репликацию, скрипты Lua, транзакции и различные уровни сохранения на диске, а также обеспечивает высокую доступность через Redis Sentinel и автоматическое разбиение с помощью кластера Redis.

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

Redis поддерживает асинхронную репликацию с быстрой неблокирующей синхронизацией и автоматическим переподключением с частичной повторной синхронизацией при сетевом разделении.

channels_redis - единственный официальный поддерживаемый Django канальный слой, для производственного использования с Redis

Скачайте и установите Redis с официального сайта. Далее установите необходимый модуль для Django:

pip install channels-redis

Запустите Redis сервер в отдельной консоли следующим образом: redis-server


И настройте слой канала в файле настроек Django следующим образом:

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": ['redis://127.0.0.1:6379',],
        },
    },
}


Запустим проект, и мы видим что наш чат прекрасно работает через Redis.

Мы можем запустить в новой командной строке следующий запрос:

redis-cli MONITOR

Чтобы смотреть за работой Redis, и при отправке сообщений, мы можем увидеть следующее: 

1691935344.207778 [0 127.0.0.1:49520] "ZADD" "asgispecific.38edc255ad8d4de5a069412a0d4202fd!$inflight" "1691935344.206382" "H\x9e\xaa\x93H#\xed\x1f\xf9\xb5`4\x84\xa4type\xactext_message\xa7message\xd90perminoff-ilya@yandex.ru:- Test @2023-08-13 14:2\xa6author\xb8perminoff-ilya@yandex.ru\xb0__asgi_channel__\x91\xd9Jspecific.38edc255ad8d4de5a069412a0d4202fd!a3f44c2d6ab54a479f306b9ddd001d5e"


На этом разработка веб-чата на Django закончена, осталось подвести итоги в следующем разделе.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

вот тут тоже ничего не понятно

Запустим проект, и мы видим что наш чат прекрасно работает через Redis.

Мы можем запустить в командной строке следующий запрос:

redis-cli MONITOR


я запустил чат на джанго все гуд все работает но в консоле я вписываю команду и у меня вот что показывает 

Could not connect to Redis at 127.0.0.1:6379: Connection refused


при этом редис я установил через хомвебер так же Я установил дополнение к джанго и подключил его к джанго

@No_Name, смотрите запустить наш чат мало (((

потом надо в терминале запустить редис

redis-server


потом в новой вкладке терминала уже использовать команду 

redis-cli MONITOR


и там уже будет мониторинг 
Чтобы смотреть за работой Redis,


все остальное работает спс за работу!

@No_Name, у вас действительно жесткая ошибка в лекции если наш чат запущен он не работает потому что редис у нас не запущен 
по этому надо запустить наш чат, потом открыть терминал и в нем запустить редис 

redis-server


а потом уже пользоваться нашим чатом и в момент пользования можно мониторить редис но выполнять эту команду нужно в новой вкладке терминала чтобы редис работал redis-cli MONITOR исправьте лекцию пожалуйста!

@No_Name, добавил, спасибо.

redis.exceptions.ConnectionError: Error 61 connecting to 127.0.0.1:6379. 61.
WebSocket DISCONNECT /groups/ad456174-8423-457c-bba6-672c2c506ee9/ [127.0.0.1:49495]

@Попов_Станислав, А вы скачали и установили Redis с официального сайта? И далее нужно запустить его, у вас Django не может подключится к Redis.

@Илья_Перминов, да, сейчас разобрался... Скачал  redis через home-brew 
Далее в терминале ввёл redis-server - запустился сервер, и только после этого запустил сервер django

@Попов_Станислав, я подобные сервисы запускаю через DBngin. Простая и удобная штука.

Изменен Илья Перминов

@Илья_Перминов, спасибо) Скачаю себе тоже