Django配置RedisChannelLayer出现aioredis ProtocolError报错如何解决
错误原因
- Redis 默认服务端口为 6379,你启动 daphne 时指定了
-p 6379参数,将 Django ASGI 服务绑定到了 Redis 本该使用的端口,导致 Redis 服务无法正常占用 6379 端口。 - 当 Channels 配置尝试连接
127.0.0.1:6379时,实际连接到的是 daphne 启动的 Web 服务,返回的是 HTTP 响应报文,首字节为H(对应 HTTP 响应开头的HTTP/1.1前缀),不符合 Redis 通信协议格式,因此抛出协议错误。
修复步骤
- 先终止当前运行的 daphne 进程,释放 6379 端口占用
- 启动本地 Redis 服务:执行
brew services start redis,启动后可通过redis-cli ping验证服务状态,返回PONG即代表 Redis 运行正常 - 重新启动 daphne 服务,指定其他未被占用的端口,例如常用的 8000 端口:
daphne -p 8000 VideoConference.asgi:application - 保持你当前的 Redis 版 CHANNEL_LAYERS 配置不变,重启服务后即可正常连接 Redis Channel 层。
可选排查项
如果调整后仍然报错,可以检查以下配置:
- 确认已安装适配版本的
channels-redis依赖:执行pip install channels-redis,注意 Channels 3.x 版本对应 channels-redis 3.x 版本,配套的 aioredis 版本需低于 2.0.0 - 如果你给本地 Redis 设置了访问密码,需要调整 CHANNEL_LAYERS 的 hosts 配置为带认证的格式:
"hosts": ["redis://:你的Redis密码@127.0.0.1:6379/0"]
内容的提问来源于stack exchange,提问作者imgeaslikok
相关产品推荐
相关产品推荐

