Django中如何正确使用 redis

news2024/11/27 3:48:11

文章目录

  • 问题起源:AsyncWebsocketConsumer 中的 channel_layer
  • 解决方案
    • 安装 & 启动 redis
    • 安装 channel-redis
    • 更新 settings.py 的 redis 设置

问题起源:AsyncWebsocketConsumer 中的 channel_layer

  • 在构建 websocket 的过程中,我在 consumers.py 中的代码如下:
    在这里插入图片描述

  • 使用 channel_layer.group_add

    • group_add 是 Channels 的一种机制,用于将给定的 channel 添加到特定的 group 中。
    • 在 Channels 中,一个 group 可以被看作是一组监听某个特定事件的 WebSocket 连接集合。当你想向这些连接发送相同的消息时,可以直接通过这个 group 发送,而不需要单独地向每个连接发送。
    • 例如,你可能有多个用户正在观看同一个直播房间,他们的 WebSocket 连接都应该加入到与该房间对应的 group 中。然后,当发生了某个事件(如:有新的聊天消息或者转录)时,你只需向这个 group 发送一次消息,所有在这个 group 中的用户都会收到这个消息。
  • 由于我没有设定 Redis,因此报错信息为:'NoneType' object has no attribute 'group_add' 指的是 self.channel_layer 在尝试访问 group_add 方法时,其值为 None

  • 默认情况下,AsyncWebsocketConsumerchannel_layer 属性被设置为 None。你需要在你的配置中指定一个 channel layer。通常我们使用 Redis 作为后端来实现此功能。

解决方案

安装 & 启动 redis

  • 首先确保电脑中安装了 redis 并启动,如果你是 macos,那么进行如下操作:

    brew install redis
    
  • 以下是安装的 logs
    在这里插入图片描述

  • 启动:

    brew services start redis
    
  • 如果启动失败,使用上图中的命令进行启动:

    /opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf
    

在这里插入图片描述

  • 成功启动后,会发现 redis 运行在本地的 6379 端口

安装 channel-redis

  • 需要安装 channels-redis 包才能使用 Redis channel layer:
pip install channels_redis

更新 settings.py 的 redis 设置

  • settings.py 中随便找个地方加上下述代码
    CHANNEL_LAYERS = {
        'default': {
            'BACKEND': 'channels_redis.core.RedisChannelLayer',
            'CONFIG': {
                "hosts": [('127.0.0.1', 6379)],  # Update this if your Redis runs on a different host or port
            },
        },
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生之深入解析K8S的请求和限制

一、Kubernetes 限制和请求 在 Kubernetes 中使用容器时,了解涉及的资源是什么以及为何需要它们很重要。有些进程比其它进程需要更多的 CPU 或内存,这很关键,永远不应该让进程饥饿,知道了这一点,那么应该正确配置容器…

MQTT 5.0 中的安全认证机制:增强认证介绍

在本系列之前的文章中我们提到,借助 MQTT CONNECT 报文中的 Username 和 Password 字段,我们可以实现一些简单的认证,比如密码认证、Token 认证等。为了进一步保障物联网系统的安全,在本期文章中,我们将一起了解另一种…

tty(四)tty框架分析

基于linux-3.14.16 重要文件:tty_io.c 一、tty子系统 开机添加了2个次设备号为0和1的字符设备,即/dev/tty和/dev/console。 二、分配tty驱动接口alloc_tty_driver 最终调用的__tty_alloc_driver分配 先分配一个tty_driver 因为flags为0&#xff0c…

从编程开发角度比较电机驱动芯片:DRV8833、TB6612、A4950、L298N

这几款驱动芯片都是用于控制直流电机的常见驱动芯片,下面是它们的相同点和不同点的比较: 相同点: 都可以用于控制直流电机的转速和方向。 都支持PWM控制方式,可以实现电机的速度调节。 都提供了使能引脚,可以通过使…

(ARM)7/5

1.串口发送单个字符 2.串口发送字符串 uart4.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_uart.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h"//初始化相关操作 void hal_uart4_init();//发送一个字符 v…

uniapp学习之【uniapp的返回事件 onBackPress 在微信小程序中不生效的问题】

uniapp 的返回事件 onBackPress 在微信小程序中不生效的问题 场景:页面中点击左上角的返回按钮,监听返回操作,页面返回前执行了一些操作, uniapp 页面生命周期中有 onBackPress ,因此将操作写在了 onBackPress () 页面生命周期钩子当中, H5 测试一切正常,但是微信开…

7、架构:模板设计

在低代码开发中,除了基础组件与物料之外,模板也是必不可少的模块,是基于物料之上的更高级的产物,除了具备业务属性之外会更偏向专属的技术领域,例如可视化大屏、数据分析、中台管理等。 此外模板通常是比较完整的应用…

k8s Label 2

在 k8s 中,我们会轻轻松松的部署几十上百个微服务,这些微服务的版本,副本数的不同进而会带出更多的 pod 这么多的 pod ,如何才能高效的将他们组织起来的,如果组织不好便会让管理微服务变得混乱不堪,杂乱无…

作物计数方法汇总

在研究农情的方向中,作物计数是一个很重要的方向,需要用到很多方法,这里做一个小小的总结 (1)地理栅格数据(tif图片)裁剪并生成带地理坐标的切片 如图需要将下图所示的tif图裁剪并生成切片(截图一部分) 源码来自&…

微服务 02-rabbitmq在springboot中如何使用(上篇)

目录 前言: 上文传送 -> 安装rabbitmq传送门: -> rabbitmq使用出现问题解决传送门: 1. rabbitmq的六大模式: 1.1 简单模式: (一对一) -> 业务场景: 1.2 工作模式: (一对多) -> 业务场景: 1.3 发布与订阅模式: (广播) 1.4 路由模式: -> 业务场景 …

计算机系统的层次结构

计算机系统 计 算 机 系 统 { 计 算 机 软 件 { 系 统 软 件 应 用 软 件 计 算 机 硬 件 { 存 储 器 运 算 器 控 制 器 输 入 设 备 输 出 设 备 计算机系统 \begin{cases} 计算机软件\begin{cases}系统软件\\应用软件\end{cases}\\计算机硬件\begin{cases}存储器\\运算器\…

YoloV8改进---注意力机制:引入瓶颈注意力模块BAM,对标CBAM

目录 ​编辑 1.BAM介绍 2.BAM引入到yolov8 2.1 加入modules.py中: 2.2 加入tasks.py中: 2.3 yolov8_BAM.yaml 1.BAM介绍 论文:https://arxiv.org/pdf/1807.06514.pdf 摘要:提出了一种简单有效的注意力模块,称为瓶颈…

06、Nginx反向代理与负载均衡

反向代理: 这种代理方式叫做,隧道代理。有性能瓶颈,因为所有的数据都经过Nginx,所以Nginx服务器的性能至关重要 负载均衡: 把请求,按照一定算法规则,分配给多台业务服务器(即使其中…

【论文笔记】Skill-based Meta Reinforcement Learning

【论文笔记】Skill-based Meta Reinforcement Learning 文章目录 【论文笔记】Skill-based Meta Reinforcement LearningAbstract1 INTRODUCTION2 RELATED WORKMeta-Reinforcement LearningOffline datasetsOffline Meta-RLSkill-based Learning 3 PROBLEM FORMULATION AND PRE…

CPU大小端和网络序的理解

引子 Big/Little Endian是Host CPU如何去理解在内存中的数据,内存中的数据是没有Big/Little Endian之分的(内存仅仅作为存储介质),而Host CPU才有Big/Little Endian之分。 不同Endian的CPU,从内存读取数据的时候&#…

Linux进度条

Linux进度条 一.基本概念1.回车和换行2.缓冲区2.实现倒计时 二.进度条1.前置工作2.代码实现 一.基本概念 1.回车和换行 回车:指光标移到该行的起始位置(\r)。 换行:换到下一行(\n)。 在c语音里\n将回车和换…

spring.boot 随笔0 springFactoriesInstance入门

0. 其实也没有那么入门 明天还要上班,速度write,直接放一张多样性比较好的 spring.factories 文件(取自 spring-boot-2.3.4.RELEASE.jar) # PropertySource Loaders org.springframework.boot.env.PropertySourceLoader\ org.springframework.boot.env…

知识图谱实战应用19-基于Py2neo的英语单词关联记忆知识图谱项目

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用19-基于Py2neo的英语单词关联记忆知识图谱项目。基于Py2neo的英语单词关联记忆知识图谱项目可以帮助用户更系统地学习和记忆英语单词,通过图谱的可视化展示和智能推荐功能,提供了一种全新的、更高效的记忆方法,并促进…

AtomicInteger使用详解

AtomicInteger使用详解 1、get():获取当前AtomicInteger对象的值。2、set(int newValue):将AtomicInteger对象的值设置为指定的newValue。3、getAndSet(int newValue):先获取当前AtomicInteger对象的值,然后将对象的值设置为指定的…

ROS1/2机器人课程的价值和规模

价值用价格,规模用销量。 免费的ROS1/2课程也很多。 2023版,15元,24人。 2022版,1.99元,21人。 价格不贵,人数很少,店家也很少。 当然,有朋友说,有免费冲击&#xff0…