Redis ERR 未知命令“BZPOPMIN”

Alo*_*lon 14 redis django-channels

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

我在 Django 频道上关注本教程,并运行了以下代码:

>>> 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')
Run Code Online (Sandbox Code Playgroud)

执行上面的最后一行时,出现此错误:

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'
Run Code Online (Sandbox Code Playgroud)

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

小智 36

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

尝试使用 pip 安装 2.4.2 版本:

pip install channels-redis==2.4.2
Run Code Online (Sandbox Code Playgroud)

  • 只需更新redis服务器即可解决该问题。 (2认同)

suh*_*lvs 10

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

$ sudo add-apt-repository ppa:redislabs/redis
$ sudo apt-get update
$ sudo apt-get install redis
Run Code Online (Sandbox Code Playgroud)

然后重新启动redis-server.

  • 这应该被接受,因为它允许最新版本的通道和通道-redis (2认同)

小智 8

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

github.com/tporadowski/redis/releases获取


Pra*_*a_t 5

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

然而,微软开发和维护microsoftarchive/redis。它也不再受支持(旧版本可用)。关于在 Windows 10 中安装第 5 版,我进行了长时间的搜索。但没有运气。

更好的是你可以去Memurai。Memurai 与 Redis 协议 100% 兼容(也支持第 5 版)。它可以免费用于开发和测试。

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

  • 安装 Memurai 解决了我的问题。谢谢! (3认同)
  • 另一种选择是 https://github.com/tporadowski/redis - 它是 OSS,看起来比 Memurai 更接近 Redis,而且它支持“BZPOPMIN”命令。 (2认同)

Man*_*ngh 5

只需从这里下载适用于 Windows 的最新版本的 Redis https://github.com/tporadowski/redis/releases 即可

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