【问题标题】:Redis ERR unknown command 'BZPOPMIN'Redis ERR 未知命令 'BZPOPMIN'
【发布时间】:2020-10-28 09:40:47
【问题描述】:

我按照these instructions(即sudo apt-get install redis-server)在Windows 10 上的Ubuntu Linux 子系统中安装了Redis 4.0.9 版。

我在 Django 频道上关注this tutorial,我运行了以下代码:

>>> import channels.layers
>>> channel_layer = channels.layers.get_channel_layer()
>>> from asgiref.sync import async_to_sync
>>> async_to_sync(channel_layer.send)('test_channel', {'type': 'hello'})
>>> async_to_sync(channel_layer.receive)('test_channel')

当执行上面的最后一行时,我得到这个错误:

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "C:\Users\xyz\Anaconda3\envs\django\lib\site-packages\asgiref\sync.py", line 120, in __call__
    return call_result.result()
  File "C:\Users\xyz\Anaconda3\envs\django\lib\concurrent\futures\_base.py", line 425, in result
    return self.__get_result()
  File "C:\Users\xyz\Anaconda3\envs\django\lib\concurrent\futures\_base.py", line 384, in __get_result
    raise self._exception
  File "C:\Users\xyz\Anaconda3\envs\django\lib\site-packages\asgiref\sync.py", line 180, in main_wrap
    result = await self.awaitable(*args, **kwargs)
  File "C:\Users\xyz\Anaconda3\envs\django\lib\site-packages\channels_redis\core.py", line 485, in receive
    return (await self.receive_single(channel))[1]
  File "C:\Users\xyz\Anaconda3\envs\django\lib\site-packages\channels_redis\core.py", line 508, in receive_single
    index, channel_key, timeout=self.brpop_timeout
  File "C:\Users\xyz\Anaconda3\envs\django\lib\site-packages\channels_redis\core.py", line 345, in _brpop_with_clean
    result = await connection.bzpopmin(channel, timeout=timeout)
aioredis.errors.ReplyError: ERR unknown command 'BZPOPMIN'

this page,有人建议使用 Redis 版本 5。如何在 Windows 10 上安装 Redis 版本 5?关于如何解决此问题的任何其他想法?

【问题讨论】:

标签: redis django-channels


【解决方案1】:

我认为问题在于与 channels-redis 软件包版本的兼容性!前段时间我已经测试过频道,它与频道-redis 版本 2.4.2 配合得很好,最近他们在版本 3.0.1 中,这个版本不起作用正确,但我不知道为什么。

尝试使用 pip 安装 2.4.2 版本:

pip install channels-redis==2.4.2

【讨论】:

    【解决方案2】:

    使用 redis 5.0.9。它适用于同样的错误。

    github.com/tporadowski/redis/releases获取它

    【讨论】:

      【解决方案3】:

      只需从此处下载最新版本的 Redis for Windows https://github.com/tporadowski/redis/releases 即可使用。

      您不需要降级您的频道-redis 等的版本。Redis 的这个问题根本与任何 python 包无关。

      【讨论】:

      • 它只支持64位吗?我需要 32 位的,不知道从哪里得到一个。我也在使用 Windows 7,这使得它更难找到。
      • @justbeingalearner 看看这个。 stackoverflow.com/questions/57536012/… 并安装与我提供链接相同的 redis
      • 我试过安装但是说不支持64位。
      • @justbeingalearner 你必须更新到窗口 10 然后它肯定会工作
      【解决方案4】:

      Windows 操作系统中没有对 Redis 的官方支持。

      但是,Microsoft 开发和维护microsoftarchive/redis。此外,它不再受支持(旧版本可用)。关于在 Windows 10 中安装第 5 版,我搜索了很长时间。但没有运气。

      你最好选择Memurai。 Memurai 与 Redis 协议 100% 兼容(也支持版本 5)。它可免费用于开发和测试。

      编辑:来自 Itamar 的评论,你也可以使用 this 作为 Memurai 的替代品

      【讨论】:

      • 另一种选择是 github.com/tporadowski/redis - 它是 OSS,看起来比 Memurai 更接近 Redis,而且它支持 BZPOPMIN 命令。
      • 我不认为 github.com/tporadowski/redis 比 Memurai 更接近 Redis。它们都源自(现已放弃的)MS Open Tech 端口,而 Memurai 是第一个具有 Redis 5.x 兼容性的。 Memurai 还支持 BZPOPMIN 命令。
      • 安装 Memurai 解决了我的问题。谢谢!
      【解决方案5】:

      您需要安装redis的最新版本(6+):

      $ sudo add-apt-repository ppa:redislabs/redis
      $ sudo apt-get update
      $ sudo apt-get install redis
      

      然后重启redis-server

      【讨论】:

      • 这应该被接受,因为它允许最新版本的频道和频道-redis
      【解决方案6】:

      这就是我解决此问题的方法。 Ubuntu 18 安装 redis 4,但 ubuntu 20 安装 redis 5。您可以通过键入 redis-cli -v 找到您的 redis 版本。所以我从我的 windows linux 子系统(WSL)中卸载了 ubuntu 18,然后重新安装了 ubuntu 20。它工作得很好。

      【讨论】:

        【解决方案7】:

        在 Ubuntu 16.04 上同样的问题

        同样,我在 Django Channels 网站上关注聊天应用程序 tutorial 时遇到了同样的错误:

        aioredis.errors.ReplyError: ERR unknown command 'BZPOPMIN'
        

        我使用这些版本时出现的问题:

        redis-server==3.0.6
        channels==3.0.3
        channels-redis==3.2.0
        

        感谢@marvin-correia他的answer我发现问题的原因是channels-redis包的版本!所以按照他的建议,我安装了channel-redis版本2.4.2,错误消失了。

        pip install channels-redis==2.4.2
        

        另外,我必须注意到频道包自动降级为channels==2.4.0

        【讨论】:

          【解决方案8】:

          问题出在版本上。 试试旧的 我发现“2,3,4”任何版本都稳定且工作正常。 https://github.com/tporadowski/redis/releases

          【讨论】:

            【解决方案9】:

            要添加到@Marvin 的答案,对我来说它是相似的(可能是一些版本控制问题),我将 django_channels 和 django 重新安装到教程中指定的确切版本(3.0、2.2)并且它有效。不知道究竟是什么工作,但建议检查一下:)

            【讨论】:

              【解决方案10】:

              我也会确认马文斯的回答。希望这会对某人有所帮助,但也将这里留作笔记。

              发展:

              (此设置有效)考虑到数据发送到并形成 http://localhost:8000

              设置

              在 Ubuntu 20.04 上运行 WSL 的 Windows 10

              • Python==3.10
              • Django==4.0
              • Redis==5.0.7
              • channels-redis==3.3.1

              生产

              设置

              • Python==3.8
              • Ubuntu==16.04
              • Redis-server==3.0.6
              • chanels-redis==2.4.2
              • 频道==3.0.3

              当我降级时,channels-redis,它也会自动降级 channels。然后您可以强制升级到 channels==3.0.3,但会引发不兼容错误。此外,如果最有可能更新 2 个文件以运行 Django 4.0

              1 在这里 https://github.com/django/channels/issues/1609

              【讨论】:

                猜你喜欢
                • 2019-01-07
                • 2020-03-25
                • 1970-01-01
                • 1970-01-01
                • 2017-10-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多