如何在Windows的WSL2下载并配置Redis,并且通过配置端口转发,实现本地pycharm访问redis服务。一文详解。

我目前在使用Python的Celery库,需要用到Redis进行集成。安装Redis的过程中,遇到一些问题,以下是详细的解决过程。

记录下来详细处理过程,方便帮助更多掉坑的朋友。

 

在 WSL2(Windows Subsystem for Linux 2)中安装和运行 Redis 是推荐的方式,因为 Redis 在 Linux 环境下更稳定且性能更好。

以下是详细步骤,包括如何在 WSL2 中安装 Redis 以及如何配置 Celery 的 broker_url 和 result_backend。

1. 在 WSL2 中安装 Redis

假设你已经安装了 WSL2(例如 Ubuntu 分布),请按照以下步骤操作:

  • 启动 WSL2
    1. 打开 Windows 终端(或 PowerShell/CMD),输入:
wsl

确保 WSL2 环境已更新:

sudo apt update && sudo apt upgrade -y

下面我们开始安装 Redis:

1.安装 Redis Server:

sudo apt install redis-server -y

2.安装完成后,Redis 通常会自动启动。可以检查 Redis 是否运行:

redis-cli ping

如果返回 PONG,说明 Redis 已运行。

 

启动 Redis

  • 如果 Redis 未自动启动,手动启动:
sudo service redis-server start

验证 Redis 状态:

sudo service redis-server status

确保状态显示 active (running)。

默认情况下,Redis 监听在 127.0.0.1:6379

 

可选)配置 Redis 开机自启: Redis 默认已启用开机自启。如果需要确认或调整:

sudo systemctl enable redis-server

 

2. 接下来我们来配置 Celery 的 broker_url 和 result_backend

在 WSL2 中运行 Redis 后,你需要确保 Celery(通常在 Windows 的 PyCharm 或 WSL2 的 Python 环境中运行)能够连接到 WSL2 的 Redis 实例。

由于 WSL2 的网络环境与 Windows 主机隔离,配置 broker_url 和 result_backend 需要注意网络访问。

 

情况 1:Celery 在 Windows 的 PyCharm 中运行

如果你的 Celery 代码在 Windows 的 PyCharm 中运行,而 Redis 在 WSL2 中,你需要让 Windows 访问 WSL2 的 Redis 实例。

  • 获取 WSL2 的 IP 地址
    1. 在 WSL2 终端中运行:
ip addr show eth0 | grep inet

输出类似:

inet 172.18.xxx.xxx/20 brd 172.18.xxx.xxx scope global eth0

记录 172.18.xxx.xxx(这是 WSL2 的内部 IP)。注意:WSL2 的 IP 可能在每次重启后变化。

或者,使用 WSL2 的主机别名:

  • WSL2 提供了一个特殊的 DNS 名称 localhost 或 127.0.0.1,但 Windows 访问 WSL2 的服务需要端口转发。

 

配置端口转发(推荐): 为了简化连接,建议将 WSL2 的 Redis 端口(6379)转发到 Windows 的 localhost:

1、在 Windows PowerShell(以管理员身份运行)中,添加端口转发:

执行如下命令,

netsh interface portproxy add v4tov4 listenport=6379 listenaddress=127.0.0.1 connectport=6379 connectaddress=<WSL2_IP>

这一步执行完,是不会有任何返回结果的。另外,需注意:这里<WSL2_IP> 替换成上一步的  172.18.xxx.xxx 【你对应IP地址】即可

 

2、验证端口转发:

netsh interface portproxy show v4tov4

返回结果如下

侦听 ipv4:                 连接到 ipv4:

地址            端口        地址            端口
--------------- ----------  --------------- ----------
127.0.0.1       6379        172.18.xxx.xxx   6379

现在,Windows 的 127.0.0.1:6379 便会映射到 WSL2 的 Redis。

 

3、测试连接:

在 Windows 的 PyCharm 终端或 Python 脚本中,测试 Redis 连接

import redis

r = redis.Redis(host='127.0.0.1', port=6379, db=0) # db 是redis的分区,相当于mysql的use xx
print(r.ping())  # 应返回 True

 至此,就已经实现了情况一的window访问wsl的redis服务。

 

情况 2:Celery 在 WSL2 中运行

如果你的 Celery 代码也在 WSL2 中运行(例如,你在 WSL2 的 PyCharm 或终端中开发),配置更简单,因为 Celery 和 Redis 在同一网络环境中。

  • 安装 Python 和 Celery

1、在 WSL2 中安装 Python 和 pip:

sudo apt install python3 python3-pip -y

 

2、安装 Celery 和 Redis 客户端:

pip3 install celery redis

 

设置 Celery 配置: 在 tasks.py 或配置文件中,使用 localhost 或 127.0.0.1

from celery import Celery

app = Celery('tasks',
             broker='redis://localhost:6379/0',
             backend='redis://localhost:6379/0')

app.conf.update(
    task_serializer='json',
    accept_content=['json'],
    result_serializer='json',
    timezone='Asia/Shanghai',
    enable_utc=True,
)

说明:在 WSL2 内部,localhost:6379 直接指向本地的 Redis 服务。

启动 Celery

1、确保 Redis 正在运行:

sudo service redis-server start

2、在 WSL2 终端中,切换到项目目录,运行:

celery -A tasks worker --loglevel=info

 

3. 动态处理 WSL2 IP 变化(可选)

WSL2 的 IP 地址可能在重启后变化,导致端口转发失效。我们可以编写一个脚本自动化更新:

  • Windows 脚本(PowerShell): 创建一个 .ps1 文件(例如 update_wsl_redis.ps1):
$wsl_ip = wsl bash -c "ip addr show eth0 | grep inet | awk '{print \$2}' | cut -d'/' -f1"
netsh interface portproxy delete v4tov4 listenport=6379 listenaddress=127.0.0.1
netsh interface portproxy add v4tov4 listenport=6379 listenaddress=127.0.0.1 connectport=6379 connectaddress=$wsl_ip
Write-Output "Updated Redis forwarding to WSL2 IP: $wsl_ip"

以管理员身份运行:

.\update_wsl_redis.ps1

 

4. 注意事项

  • 防火墙:确保 Windows 防火墙允许 6379 端口的通信。如果遇到连接问题,检查:
netstat -ano | findstr 6379

Redis 绑定:默认 Redis 只绑定 127.0.0.1。如果需要外部访问(不推荐),编辑 /etc/redis/redis.conf,将 bind 127.0.0.1 改为 bind 0.0.0.0,然后重启 Redis:

sudo service redis-server restart
  • 性能WSL2 的 Redis 性能优于 Windows 原生 Redis,适合开发和测试。生产环境建议使用独立的 Linux 服务器。
  • PyCharm 集成
    • 如果在 Windows 的 PyCharm 中开发,确保使用正确的 Python 解释器(Windows 或 WSL2 的)。
    • 如果在 WSL2 中开发,可以安装 WSL2 的 PyCharm 或直接用 VS Code 配合 WSL 插件。

5. 总结

  • Windows 的 Celery + WSL2 的 Redis
    • broker_url = 'redis://127.0.0.1:6379/0'
    • result_backend = 'redis://127.0.0.1:6379/0'
    • 需要端口转发(127.0.0.1:6379 到 WSL2 IP)。
  • WSL2 的 Celery + WSL2 的 Redis
    • broker_url = 'redis://localhost:6379/0'
    • result_backend = 'redis://localhost:6379/0'
    • 无需额外网络配置。

 

posted @ 2025-06-10 15:35  AlphaGeek  阅读(488)  评论(0)    收藏  举报