Django中如何正确使用 redis

这篇具有很好参考价值的文章主要介绍了Django中如何正确使用 redis。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题起源:AsyncWebsocketConsumer 中的 channel_layer

  • 在构建 websocket 的过程中,我在 consumers.py 中的代码如下:
    Django中如何正确使用 redis,django,redis,python

  • 使用 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
    Django中如何正确使用 redis,django,redis,python

  • 启动:

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

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

Django中如何正确使用 redis,django,redis,python

  • 成功启动后,会发现 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
            },
        },
    }
    

Heroku 部署

add-on 添加 Redis 组件

Django中如何正确使用 redis,django,redis,python文章来源地址https://www.toymoban.com/news/detail-524657.html

  • 在这里搜索并添加一个 Redis 应用,这让你可以在 Heroku 的服务器上可以使用 redis 服务(但是要付费)

settings.py

  • 如果你要将 Django 部署到 Heroku,那么要将 settings.py 中有关 CHANNEL_LAYERS 的部分改成:
    CHANNEL_LAYERS = {
        'default': {
            'BACKEND': 'channels_redis.core.RedisChannelLayer',
            'CONFIG': {
                "hosts": [os.environ.get("REDIS_URL", 'redis://localhost:6379')],  # 如果你的Redis运行在不同的主机或端口,请调整这里的设置
            },
        },
    }
    
  • 因为在 Heroku 上运行 Django Channels 和 Redis 时,你需要确保你的设置正确指向 Heroku Redis 的 URL (通常通过环境变量 REDIS_URL 提供)。所以不能直接写死成 "hosts": [('127.0.0.1', 6379)]

到了这里,关于Django中如何正确使用 redis的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django_使用redis缓存数据

    目录 一、配置redis 二、缓存Django的默认session 三、使用django的缓存机制缓存数据 四、自定义缓存数据 源码等资料获取方法 在settings中添加配置参数 如果需要将session存储到redis中,还需要增加下面的配置参数 查看session是否保存至redis中  注意:会有默认设置过期时间 使用自

    2024年02月13日
    浏览(33)
  • python在Django中,如何使用MySQL数据库进行分页怎么实现

    在Django中,使用MySQL数据库进行分页是一个相对简单的任务。Django的ORM提供了内置的分页功能,你只需要使用Paginator类即可。以下是一个基本的示例,展示了如何在Django中使用MySQL进行分页: 首先,确保你已经安装了Django和MySQL,并且已经配置了Django项目以使用MySQL数据库。

    2024年04月29日
    浏览(47)
  • 如何使用Django的Form组件

    目录 一、Django Form组件简介 二、创建表单 三、渲染表单 四、处理表单提交 五、自定义表单验证 六、总结 在Web开发中,表单是不可或缺的一部分。它们允许用户输入数据并与服务器进行交互。在Django框架中,表单的处理变得相对简单和直观。Django自带了一个强大的表单处理

    2024年01月18日
    浏览(88)
  • 如何在Django中使用django-crontab启动定时任务、关闭任务以及关闭指定任务

    安装django-crontab包: 在Django项目的settings.py文件中,找到INSTALLED_APPS配置,并添加\\\'django_crontab\\\'到列表中: 在settings.py文件的末尾,添加以下配置以设置定时任务的时间间隔: 假设我们有一个名为myapp的应用,其中定义了task1、task2和task3三个定时任务。具体参数设置看这里 在终端中

    2024年02月09日
    浏览(48)
  • Python之Django的基本使用

    先在本地创建一个用来存放项目的路径 进入创建好的路径,创建虚拟环境 进入虚拟环境 执行pip命令安装Django模块(最新版) (Django模块 仅仅在 虚拟环境中,而不是安装在Python全局环境) 创建Django项目 创建app应用( 一般一个项目包含多个app应用程序(当然,通用的app也可以在

    2024年02月09日
    浏览(47)
  • 【Python-Django】如何在一个项目中创建多个app模块

    django开发案例:a​​​​​【Django】开发日报_1_Day:用户管理系统案例-创建项目_django 开发用户管理系统_代码骑士的博客-CSDN博客 前面做过的管理系统项目功能比较单一,只用一个模块就能解决问题。如果想创建多个不同的模块的话,就需要创建多个app组件,下面就介绍一

    2024年02月06日
    浏览(54)
  • Django 如何使用 Celery 完成异步任务或定时任务

    以前版本的 Celery 需要一个单独的库(django-celery)才能与 Django 一起工作, 但从 Celery 3.1 开始,情况便不再如此,我们可以直接通过 Celery 库来完成在 Django 中的任务。 以 Docker 安装为例,安装一个密码为 mypassword 的 Redis 服务端 在 Django 项目中创建一个 celery.py 文件,并配置

    2023年04月25日
    浏览(50)
  • python Django render()函数使用祥解

    render()函数传递context来填充模板 help文档中render描述 render(request, template_name, context=None, content_type=None, status=None, using=None) 参数: request: 是一个固定参数 template_name: templates中定义的文件,注意路径名。比如:“templates/polls/index.html”, 则参数这样写:“polls/index.html” context: 要传

    2024年02月17日
    浏览(36)
  • VSCODE上使用python_Django

    接上篇 https://blog.csdn.net/weixin_44741835/article/details/136135996?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22136135996%22%2C%22source%22%3A%22weixin_44741835%22%7D VSCODE官网: Editing Python Code in Visual Studio Code 自动补齐代码增加下面四个extension。 github Copilot Django Tutorial, 前

    2024年02月19日
    浏览(32)
  • 如何使用Pycharm 快速搭建 Django 项目 (分享详细图文教程)

    1. 准备工作 在开始创建Django项目之前,需要先确保已经安装了Python和Pycharm。并且python中已经安装好了Django依赖。 1安装python(这里我安装使用的是python3.11.4稳定版本) 官网下载太慢了这里直接贴网盘下载连接了,一起贴出pycharm的下载地址 python网盘地址:点击下载 提取码:

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包