Redis在Django频道中扮演什么角色

问题描述

最近我一直在使用django channels使其支持websocket protocol,我使用微服务方式,通过django通道连接其他组件,但是我必须为每个连接编写一个Consumer class例如class Consumer(AsyncWebsocketConsumer):,仍然使用 redis 进行接收和处理,指出这部分是作为渠道层存储的正式文档,因此它是作为消息队列,是否存在缓存或其他常用功能

我写信来查找每个连接是否有使用者,以及我是否可以将其视为消息队列

但是,我没有找到相关材料来支持我的观点。

请问我的理解是否正确?我衷心希望您能提供相关材料作为参考,

解决方法

这取决于您的使用方式。 django-channel_layers中redis的主要目的是存储不同消费者实例相互通信所需的必要信息。

例如,在渠道文档的tutorial部分中,很明显,Redis用作渠道名称和组名称的存储层。这些都存储在Redis中,以便可以从任何使用者实例访问它们。例如,如果我创建一个名为“用户”的组,然后向其中添加3个不同的频道名称,则此信息存储在Redis中。现在,每当我要将数据发送到组中的通道时,我都可以简单地从我的使用者中引用该组,而Django-channels会自动检索Redis中该组下存储的通道名称。

另一方面,如果要以非常规方式使用使用者,即作为后台工作人员使用,则Redis会成为消息队列。那是因为当您发送包含由一名后台工作人员(“消耗”这些任务的使用者)要完成的任务的消息时,这些消息必须存储在某个位置,以便后台工作人员可以在完成其他任务时检索它们