我可以将安装在适用于 Linux 的 Windows 子系统上的 Redis 与 Windows 中的 python 应用程序一起使用吗?

Ext*_*cal 9 python redis windows-subsystem-for-linux

我想在 Windows 上开发一个 python 应用程序,它将使用 Redis 作为 Celery 的代理。假设我的应用程序可以与我安装在适用于 Linux 的 Windows 子系统上的 Redis 实例进行交互是否正确?

我在 Windows 10 上启用了适用于 Linux 的 Windows 子系统,并在其上安装了 Ubuntu 和 Redis,并启动了服务器。在 Windows 端,我使用 VSCode 来编写 python 代码。如下图,在我的python代码中,我试图连接到本地主机上的Redis:6379

from celery import Celery

BROKER_URL = 'redis://localhost:6379/0'

app = Celery('tasks', broker=BROKER_URL)
Run Code Online (Sandbox Code Playgroud)

我正在尝试确认我用 Windows 编写的 Python 代码是否可以与在 Ubuntu 上运行的 Redis 服务器进行交互。这可能吗,如果可以,我如何确认连接?

the*_*orn 19

是的,您可以从 Windows 使用 wsl 中的 redis。首先,确保你已经安装并启动了 redis 服务:

sudo apt-get install redis-server
sudo systemctl enable redis-server.service
Run Code Online (Sandbox Code Playgroud)

如果您已经在 Windows 上运行了 redis 服务器,则需要编辑 /etc/redis/redis.conf 中的端口指令(例如,像我对下面的命令所做的那样,编辑为 7379)。

然后启动服务

sudo service redis-server start
Run Code Online (Sandbox Code Playgroud)

然后运行redis-cli并发出monitor命令(-p 7379如果您使用的是默认端口,则可以跳过):

bp@bjorn8:~$ redis-cli -p 7379
127.0.0.1:6379> monitor
OK
Run Code Online (Sandbox Code Playgroud)

现在,从您的 Windows 命令提示符,从 pypi ( https://pypi.org/project/redis/ )安装 redis 模块:

pip install redis
Run Code Online (Sandbox Code Playgroud)

然后启动 python 并发出测试命令(同样,如果您使用的是默认端口,请使用 6379):

>>> import redis
>>> cn = redis.Redis('localhost', 7379, 0)
>>> cn.keys("*")
[]
Run Code Online (Sandbox Code Playgroud)

在您的 wsl 会话中,您现在应该看到如下内容:

1558196107.718695 "KEYS" "*"
Run Code Online (Sandbox Code Playgroud)

注意:redis 对服务器在哪里没有模糊。如果你在 windows 上安装了 cli 工具,你可以从 dos 向在 wsl 上运行的服务器发出命令:

c:\srv> redis-cli -p 7379
redis 127.0.0.1:7379> keys "*"
(empty list or set)
redis 127.0.0.1:7379>
Run Code Online (Sandbox Code Playgroud)

反之亦然(wsl 上的 redis-cli 会很高兴地连接到在 Windows 上运行的 redis 服务——这就是我发现我需要指定不同端口的方式;-)