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 服务——这就是我发现我需要指定不同端口的方式;-)