dot Redis 8 已发布—并且是开源的

了解更多

如何在 Windows 11 上安装和使用 Redis

了解如何从 Windows 命令行控制 WSL 安装的 Redis 数据库。

如果您喜欢使用 Redis 进行网站缓存,并且在 Windows 上本地编写和测试代码,您会想知道如何运行 Redis 数据库的本地实例。 

您有几个选择。您可以从运行 MacOS 或类似 Linux 系统的另一台计算机上运行它。您可以在 Windows 下从 Docker 容器中运行它。或者您可以直接从适用于 Linux 的 Windows 子系统 (WSL) 中运行它。

这个过程是我自己摸索出来的,所以请将本教程视为“一位技术人员的经验”。可能还有其他方法可以实现,但这种方法对我有效。

开始使用 WSL

Windows(Windows 10、Windows 11、Windows Server 2019)有一个兼容层,允许您运行 Linux 二进制可执行文件。当前版本是 WSL 2,但我将其称为 WSL。

如果您尚未安装 WSL,请从提升的 shell(作为管理员)运行以下命令

wsl --install
Installing WSL via the command line
通过命令行安装 WSL

这将安装您需要的组件,然后要求您重启计算机。(有关安装和配置 WSL 的更多信息,Microsoft 提供了详尽的文档。)

本质上,一旦您安装了 WSL,使 Redis 工作就是一个正常的 Ubuntu 部署过程。

Ubuntu 是 WSL 的默认 Linux 发行版。重启后,当 Windows 执行安装时,您可能会看到一段时间的 Ubuntu shell。它会运行一段时间,然后要求您输入用户名和密码。该密码将是您的 sudo(root 用户)密码。

完成后,您应该看到如下内容。

The final step of installing WSL is configuring the default Linux distribution.
安装 WSL 的最后一步是配置默认的 Linux 发行版。

接下来要做的是安装 Redis 数据库。在通过 apt-get 安装 Redis 之前,我们需要更新 apt-get 并移除一些新安装的光鲜表面。

sudo apt-get update
sudo apt-get upgrade

在 WSL 上安装 Redis Server

完成后,您可以安装 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 工具设置和获取缓存值。

您应该会看到如下内容

Running redis-cli from the Ubuntu shell
从 Ubuntu shell 运行 redis-cli

现在 Redis 数据库正在运行。如果您关闭当前的 shell 并打开一个新的,Redis 仍将继续运行。如果您重启 WSL 或 Windows,那么 Redis 将不会运行。

如果适合您的需求,您可以使用 systemctl 使其在启动时启动。

您随时可以打开一个 Ubuntu shell 并启动 Redis,但您也可以从 Windows 命令行执行此操作

wsl sudo service redis-server status
Running Redis commands from PowerShell
从 PowerShell 运行 Redis 命令

从截图中可以看出,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 工具

Redis from PowerShell with no password
从 PowerShell 运行 Redis,无需密码

适用于 Linux 的 Windows 子系统是开发人员的隐藏瑰宝之一。这颗瑰宝闪闪发光。

在 PowerShell 中使用 Redis

额外福利!因为我懒,所以在我的 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 的状态

Calling the redstat function defined in PowerShell with the results from the redis-cli command
调用在 PowerShell 中定义的 redstat 函数,并显示来自 redis-cli 命令的结果

如何在 Windows 启动时启动 Redis

又一个额外福利!如果您希望 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 的博客上。