了解如何从 Windows 命令行控制 WSL 安装的 Redis 数据库。
如果您喜欢使用 Redis 进行网站缓存,并且在 Windows 上本地编写和测试代码,您会想知道如何运行 Redis 数据库的本地实例。
您有几个选择。您可以从运行 MacOS 或类似 Linux 系统的另一台计算机上运行它。您可以在 Windows 下从 Docker 容器中运行它。或者您可以直接从适用于 Linux 的 Windows 子系统 (WSL) 中运行它。
这个过程是我自己摸索出来的,所以请将本教程视为“一位技术人员的经验”。可能还有其他方法可以实现,但这种方法对我有效。
Windows(Windows 10、Windows 11、Windows Server 2019)有一个兼容层,允许您运行 Linux 二进制可执行文件。当前版本是 WSL 2,但我将其称为 WSL。
如果您尚未安装 WSL,请从提升的 shell(作为管理员)运行以下命令
wsl --install
这将安装您需要的组件,然后要求您重启计算机。(有关安装和配置 WSL 的更多信息,Microsoft 提供了详尽的文档。)
本质上,一旦您安装了 WSL,使 Redis 工作就是一个正常的 Ubuntu 部署过程。
Ubuntu 是 WSL 的默认 Linux 发行版。重启后,当 Windows 执行安装时,您可能会看到一段时间的 Ubuntu shell。它会运行一段时间,然后要求您输入用户名和密码。该密码将是您的 sudo(root 用户)密码。
完成后,您应该看到如下内容。
接下来要做的是安装 Redis 数据库。在通过 apt-get 安装 Redis 之前,我们需要更新 apt-get 并移除一些新安装的光鲜表面。
sudo apt-get update
sudo apt-get upgrade
完成后,您可以安装 Redis 数据库
sudo apt-get install redis-server
会有一段运行过程,最终就安装好了。
Redis 默认不会开箱即用。但是,对于我自己的应用程序测试,我需要在 Redis 未运行时进行测试。因此,我的个人偏好是在我主动用于开发时才运行 Redis。所以我喜欢从命令行启动和停止它。以下是您需要知道的命令
sudo service redis-server status
sudo service redis-server start
sudo service redis-server stop
我使用 service start 命令启动 redis,它会返回一个表示 redis 正在启动的消息。您可以使用 service status 命令来验证它是否正在运行。最终的测试是连接到 Redis 并查看它是否工作。您可以使用 redis-cli 工具设置和获取缓存值。
您应该会看到如下内容
现在 Redis 数据库正在运行。如果您关闭当前的 shell 并打开一个新的,Redis 仍将继续运行。如果您重启 WSL 或 Windows,那么 Redis 将不会运行。
如果适合您的需求,您可以使用 systemctl 使其在启动时启动。
您随时可以打开一个 Ubuntu shell 并启动 Redis,但您也可以从 Windows 命令行执行此操作
wsl sudo service redis-server status
从截图中可以看出,WSL 将 sudo service 命令传递给了 Ubuntu。因为我使用了 sudo,所以我被要求输入 root 密码,并且它返回了与我在 Ubuntu shell 中看到的相同的消息。
由于我只安装了 Ubuntu,因此它是接收此命令的默认 Linux 发行版。如果您安装了多个发行版,您将使用 wsl -d DistributionName。您可以使用 wsl -l 命令获取已安装发行版的名称。与 Linux shell 不同,每次调用 sudo 时,我都会被要求输入密码。在 Linux shell 中,您只会在终端会话中第一次调用 sudo 时被提示输入密码。
在开发系统中,反复输入 root 密码可能很繁琐。有一种方法可以绕过这个麻烦。您可以在 Linux 发行版的 /etc/sudoers.d 文件夹中添加一个文件,以移除 redis-server 服务的 root 密码要求。从 Linux shell 中,执行以下操作
cd /etc/sudoers.d
sudo sh
echo "%sudo ALL=(ALL) NOPASSWD: /usr/sbin/service redis-server *" >> allowed-services
sudo chmod 0440 allowed-services
exit
我们刚刚完成了什么?通过这组命令,我们将 /etc/sudoers.d 设置为当前文件夹。您需要 root 权限才能操作此文件夹;使用 sudo sh 获取 root 权限。 echo 行基本上表示您可以对 redis-server 调用 sudo 时无需密码,并将该设置写入名为 allowed-services 的文件中。文件名 allowed-services 是任意的;我选择它是因为它对我来说有意义。sudoers.d 文件夹中有一个名为 README 的文件,解释了文件名限制。
chmod 0440 命令将权限设置为 root 账户的只读权限,并且是 sudoers.d 所必需的。这允许我们移除对 redis-server 的 sudo 密码要求,且仅针对 redis-server。
现在我们可以回到 Windows shell 并运行 wsl 命令而无需输入密码。
您甚至可以从 PowerShell 运行 redis-cli 工具
适用于 Linux 的 Windows 子系统是开发人员的隐藏瑰宝之一。这颗瑰宝闪闪发光。
额外福利!因为我懒,所以在我的 PowerShell 配置文件中创建了快捷方式。我添加了以下函数
# Check Redis status
function redstat {wsl sudo service redis-server status}
# Start the Redis service
function redstart {wsl sudo service redis-server start}
# Stop the Redis service
function redstop {wsl sudo service redis-server stop}
# Clear all of the data from the Redis database
function redclear {wsl redis-cli FLUSHALL}
现在我可以通过 redstat 轻松查看 redis-server 的状态
又一个额外福利!如果您希望 Redis 在 Windows 启动时自动启动,这需要额外几个步骤。您只需要创建一个批处理文件来启动 Redis。
在您的 Windows 启动文件夹中创建一个批处理文件。按下 Win+R 并键入 shell:startup 以在用户启动文件夹中打开一个 Windows Explorer 实例。或者使用以下命令行进入同一文件夹。
cd %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
在该文件夹中创建一个批处理文件。我使用了 start redis.cmd,但操作系统识别为批处理文件的任何文件名都可以。在该文件中,添加以下行
wsl sudo service redis-server start
下次启动计算机并登录时,Redis 将启动。由于启动文件夹中的命令通常在启动过程的后期运行,因此您登录 Windows 后可能需要一分钟才能使用它们。
现在您已经安装并运行了 Redis,是时候学习如何使用它了。入门指南应该是您的第一步。
本文的早期版本发表在 Chris Miller 的博客上。