Windows不支持fork系统调用,而Redis在各种情况下都会使用这个调用来将数据库转储到磁盘。 Redis在各种情况下都会使用这个系统调用来将其数据库转储到磁盘。如果没有 叉的能力,Redis就无法执行一些必要的 数据库保存方法,而不会阻塞客户,直到转储完成。

Questions:

1)如果我没有错的话,这个问题会在并发用户增加时出现?这样说对吗?

2) 如果我们在windows机器(生产服务器)上部署通道,这真的是一个问题吗?如果是的话,有没有更好的Redis替代品?

3) 如何在生产服务器上测试上述缺点?

Note:

不能使用wsl2(因为官方没有发布)或wsl,因为目前的windows服务器不支持。

5 个评论
AKX
如果你不需要你的Redis实例的数据持久性,那就没有问题。
@AKX 我需要数据的持久性,因为我每5秒钟向频道组(只有一个组)发送一次信息。用户被添加到频道组中,我把它看作是并发用户。对于windows机器,有什么更好的方法吗?
AKX
在这种情况下,持久性是指 "如果Redis服务器关闭,旧的数据还在那里"。
如果你运行的是windows服务器,你能不能运行一个linux虚拟机?(你希望django-channels能处理多少个并发连接,(当涉及到开放连接时,python在windows上对文件描述符的默认限制非常低)。我们发现(在不重新编译python的情况下),我们无法在windows上保持超过500个开放连接,而在linux(或任何其他*nix系统)上,似乎只是遵循系统的限制。
@MatthausWoolard 不,我已经尝试用工具箱安装docker,从 here 但它并没有帮助。所以,在这个 windows server 2008 r2 上安装虚拟机也是不可能的,虽然有一些变通方法,但对我没有帮助。而我的消费者是 async 。我是否需要改成 sync
python
django
windows
redis
django-channels
Python coder
Python coder
发布于 2020-02-26
2 个回答
Glyphack
Glyphack
发布于 2021-06-18
已采纳
0 人赞同

据我所知,要解决这个问题,你可以尝试这些方案之一。

  • 在docker容器上设置redis,使用 此图像 并在你的项目中使用它。

  • 使用virtualbox安装linux,并在那里设置redis。

  •