Windows Server 安装和配置 Redis 缓存服务 – wiki基地


Windows Server 上安装与配置 Redis 缓存服务详解

Redis (Remote Dictionary Server) 是一款开源的、基于内存的、键值对存储数据库,以其卓越的性能、丰富的数据结构和灵活性而闻名。它通常用作数据库、缓存和消息代理。尽管 Redis 的原生开发和最佳性能环境是 Linux,但在某些特定场景下,或者当团队技术栈更偏向 Windows 时,在 Windows Server 上部署 Redis 也是一种可行的选择。本文将详细阐述在 Windows Server 上安装和配置 Redis 服务的过程、注意事项及最佳实践。

1. Redis 简介与在 Windows 上的考量

1.1 Redis 的核心特性

  • 高性能:数据存储在内存中,读写速度极快,QPS(每秒查询率)可达数十万。
  • 丰富的数据类型:支持 Strings, Hashes, Lists, Sets, Sorted Sets (ZSets), Streams, HyperLogLogs, Bitmaps, Geospatial indexes 等。
  • 持久化:支持 RDB(快照)和 AOF(追加日志)两种持久化方式,确保数据在服务重启后不丢失。
  • 原子操作:所有操作都是原子的,保证了并发场景下的数据一致性。
  • 主从复制:支持数据异步复制,实现高可用和读写分离。
  • 发布/订阅:内置消息发布/订阅功能。
  • Lua 脚本:允许用户通过 Lua 脚本执行复杂的原子操作。

1.2 为何在 Windows Server 上使用 Redis?

虽然 Linux 是 Redis 的首选平台,但在以下情况下,Windows Server 部署可能被考虑:

  • 现有 Windows 生态系统:企业已经拥有成熟的 Windows Server 基础设施和运维团队。
  • .NET 应用集成:.NET 应用程序可以方便地通过客户端库(如 StackExchange.Redis)与 Windows 上的 Redis 服务集成。
  • 开发与测试环境:开发者可能希望在本地 Windows 开发机或 Windows 测试服务器上快速搭建 Redis 环境。

1.3 Windows 上的 Redis 版本考量

官方 Redis 项目不直接维护 Windows 版本。然而,早期微软的 Microsoft Open Tech (MSOpenTech) 团队维护了一个 Windows 移植版本,但此项目已不再活跃。目前,在 Windows 上运行 Redis 主要有以下几种方式:

  1. MSOpenTech 的旧版 MSI/ZIP 包:这些版本(通常是 Redis 3.x)仍然可以在 GitHub 上找到,对于非关键性应用或开发测试可能够用。
  2. Memurai:一个商业公司提供的、与 Redis API 兼容的 Windows 原生解决方案。它声称针对 Windows 进行了优化,并提供商业支持。
  3. Windows Subsystem for Linux (WSL/WSL2):这是目前在 Windows 上运行最新版 Redis 的推荐方式。WSL2 提供了完整的 Linux 内核,性能接近原生 Linux。
  4. Docker Desktop for Windows:通过 Docker 容器运行官方的 Linux 版 Redis 镜像,这也是一种非常流行和推荐的方式。

本文将重点介绍使用 MSOpenTech 的旧版 MSI 包(作为一种简便的入门方式)和 WSL2(作为更现代和推荐的方式)进行安装和配置。

2. 先决条件

  • Windows Server 版本:Windows Server 2012 R2, 2016, 2019, 2022 或更高版本。对于 WSL2,建议使用 Windows Server 2019 (Build 17763+) 或 Windows 10 (Build 19041+) 及更高版本。
  • 管理员权限:安装和配置服务需要管理员权限。
  • 网络配置:确保服务器防火墙允许 Redis 服务端口(默认为 6379)的通信(如果需要从其他机器访问)。
  • (可选) WSL2 支持:如果选择 WSL2 方式,确保服务器硬件支持虚拟化,并在 BIOS/UEFI 中启用。

3. 安装 Redis

3.1 方法一:使用 MSOpenTech 的 MSI 安装包 (Redis 3.x)

这种方法相对简单,但获取的是较旧版本的 Redis。

步骤 1:下载安装包

前往 MSOpenTech Redis 项目的 GitHub Release 页面:
https://github.com/microsoftarchive/redis/releases

通常你会找到 .msi (安装程序) 和 .zip (便携版) 文件。对于服务化部署,推荐使用 .msi 安装包。例如,下载 Redis-x64-3.0.504.msi (根据你的系统架构选择)。

步骤 2:运行 MSI 安装程序

  1. 双击下载的 .msi 文件启动安装向导。
  2. 点击 “Next”。
  3. 接受许可协议,点击 “Next”。
  4. 选择安装路径:默认路径通常是 C:\Program Files\Redis。你可以根据需要修改。
  5. 勾选 “Add the Redis installation folder to the PATH environment variable”:这将允许你在任何命令提示符窗口中直接运行 redis-cliredis-server 命令。
  6. 配置端口和防火墙
    • Port:默认是 6379。如果此端口已被占用或有其他安全考虑,可以修改。
    • Firewall:勾选 “Add an exception to the Windows Firewall for port [6379]”,以便其他机器可以访问此 Redis 服务。如果不勾选,之后需要手动配置防火墙规则。
  7. 配置内存限制
    • Set the max memory limit for Redis:这是一个重要的设置。建议设置一个明确的上限,以防止 Redis 耗尽服务器所有内存。例如,如果服务器有 16GB 内存,你可以为 Redis 分配 2GB 到 8GB,具体取决于其他应用的需求。输入值时单位是 MB (例如 2048 表示 2GB)。如果不设置,Redis 可能会使用所有可用内存。
  8. 点击 “Install” 开始安装。
  9. 安装完成后,点击 “Finish”。

步骤 3:验证安装

安装程序通常会自动将 Redis注册为 Windows 服务并启动它。

  1. 打开命令提示符 (CMD) 或 PowerShell。
  2. 输入 redis-cli 并回车。
  3. 如果连接成功,你会看到类似 127.0.0.1:6379> 的提示符。
  4. 输入 PING,如果服务器响应 PONG,则表示 Redis 服务正在运行。
  5. 输入 INFO 可以查看 Redis 服务器的详细信息。
  6. 输入 QUIT 退出 redis-cli

你也可以通过 “服务” (services.msc) 管理单元查看 Redis 服务状态。服务名称通常是 “Redis”。

3.2 方法二:使用 Windows Subsystem for Linux 2 (WSL2)

WSL2 提供了在 Windows 上运行原生 Linux 二进制文件的能力,性能远超 WSL1,并且可以运行最新版本的 Redis。这是在 Windows 上获得接近原生 Linux 体验和性能的最佳方式。

步骤 1:启用 WSL 和虚拟机平台功能

以管理员身份打开 PowerShell,执行以下命令:

powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

执行完毕后,重启计算机 以使更改生效。

步骤 2:将 WSL2 设置为默认版本 (可选但推荐)

重启后,以管理员身份打开 PowerShell,执行:

powershell
wsl --set-default-version 2

如果看到提示需要更新内核组件,请访问 https://aka.ms/wsl2kernel 下载并安装 Linux 内核更新包。

步骤 3:安装 Linux 发行版

可以从 Microsoft Store 安装 Linux 发行版 (如 Ubuntu, Debian)。对于服务器环境,你可能需要手动下载和安装。以 Ubuntu 20.04 LTS 为例:

  1. 打开 PowerShell。
  2. 下载发行版:Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing
  3. 安装发行版:Add-AppxPackage .\Ubuntu.appx (注意路径)

或者,更简单的方式是在 PowerShell 中使用 wsl --install -d <DistroName> (例如 wsl --install -d Ubuntu-20.04)。

首次启动发行版时 (例如,在开始菜单找到 “Ubuntu 20.04 LTS” 并运行),会提示你设置一个 Linux 用户名和密码。

步骤 4:在 WSL2 的 Linux 发行版中安装 Redis

  1. 启动你的 Linux 发行版 (例如,通过在 PowerShell 中输入 wslubuntu2004)。
  2. 更新包列表并升级现有包:

    bash
    sudo apt update
    sudo apt upgrade -y

    3. 安装 Redis 服务器:

    bash
    sudo apt install redis-server -y

    4. 验证 Redis 服务状态 (Ubuntu 通常会自动启动):

    bash
    sudo service redis-server status


    bash
    redis-cli PING

    如果返回 PONG,则表示 Redis 正在运行。

步骤 5:配置 Redis 在 WSL2 中随系统启动 (可选)

默认情况下,WSL2 中的服务不会随 Windows 启动而自动启动,而是在 WSL 实例首次被访问时启动。如果需要 Redis 服务在 Windows 启动后就能在 WSL 中可用,可以考虑:

  • 创建一个 Windows 计划任务,在系统启动时执行 wsl.exe sudo service redis-server start
  • 或者,在 WSL 的 ~/.bashrc/etc/profile.d/ 下添加启动脚本 (但这只在登录 WSL shell 时触发)。

对于需要持续运行的服务,通常的做法是确保 WSL 实例保持活动状态。

访问 WSL2 中的 Redis

从 Windows 主机或其他机器访问 WSL2 中的 Redis 时,WSL2 会将 Linux 端口映射到 Windows 主机。通常你可以直接使用 localhost:6379 (或你配置的端口) 从 Windows 应用程序连接到 WSL2 中的 Redis。如果 WSL2 的 IP 地址发生变化(较少见),你可能需要通过 wsl hostname -I 获取 WSL 实例的 IP 地址。

4. Redis 配置 (redis.conf)

无论哪种安装方式,Redis 的核心配置都通过 redis.conf 文件进行管理。

4.1 定位 redis.conf 文件

  • MSI 安装:通常位于 Redis 安装目录下,例如 C:\Program Files\Redis\redis.windows.confC:\Program Files\Redis\redis.windows-service.conf (用于服务)。
  • WSL2 (Ubuntu):通常位于 /etc/redis/redis.conf

强烈建议在修改配置文件前先备份它。

4.2 关键配置项详解

使用文本编辑器 (如 Notepad++ 或 VS Code,对于 WSL2 中的文件,可以使用 sudo nano /etc/redis/redis.conf) 打开配置文件。

  1. bind

    • bind 127.0.0.1 (默认): Redis 只接受来自本机的连接。这是最安全的设置,如果你的应用程序和 Redis 在同一台服务器上。
    • bind 0.0.0.0: Redis 接受来自所有网络接口的连接。如果你需要从其他机器访问 Redis,则需要此设置,但务必配合防火墙和密码进行保护。
    • bind <specific-ip-address>: Redis 只接受来自指定 IP 地址的连接。
    • 对于 WSL2,如果希望从 Windows 主机或其他网络主机访问,需要设置为 bind 0.0.0.0 或 WSL 实例的 IP 地址。
  2. port

    • port 6379 (默认): Redis 监听的端口。可以修改为其他端口以增加安全性或避免冲突。
  3. requirepass

    • # requirepass foobared (默认注释掉): 设置客户端连接 Redis 时需要提供的密码。
    • 强烈建议取消注释并设置一个强密码requirepass YourStrongPasswordHere。这是保护 Redis 最基本也是最重要的安全措施。
  4. maxmemory

    • # maxmemory <bytes> (默认注释掉): 设置 Redis 可以使用的最大内存量。当达到此限制时,Redis 会根据 maxmemory-policy 来处理。
    • 强烈建议设置此值,以防止 Redis 耗尽服务器内存。例如:maxmemory 2gb (支持 kb, mb, gb 等单位,不区分大小写)。
    • 对于 MSI 安装,安装过程中可能已经设置过此值。
  5. maxmemory-policy

    • # maxmemory-policy noeviction (默认): 当内存达到 maxmemory 限制时,新的写入操作会返回错误。
    • 其他常用策略:
      • allkeys-lru: 移除最近最少使用的键。
      • volatile-lru: 仅从设置了过期时间的键中移除最近最少使用的。
      • allkeys-random: 随机移除键。
      • volatile-random: 仅从设置了过期时间的键中随机移除。
      • volatile-ttl: 移除过期时间最早的键。
    • 选择合适的策略取决于你的应用场景。allkeys-lru 是常见的缓存策略。
    • 例如:maxmemory-policy allkeys-lru
  6. logfile

    • logfile "" (默认,MSI 版可能指向一个文件): 指定日志文件的路径。
    • MSI 安装版通常会自动配置日志文件,例如 C:\Program Files\Redis\redis_log.txt
    • WSL2 版通常是 /var/log/redis/redis-server.log
    • 可以修改为:logfile "/path/to/your/redis.log" (WSL2) 或 logfile "C:\RedisData\logs\redis.log" (Windows)。确保 Redis 进程对该路径有写入权限。
  7. loglevel

    • loglevel notice (默认): 日志级别。可选值有 debug, verbose, notice, warning。生产环境通常使用 noticewarning
  8. 持久化配置

    • RDB 快照 (Snapshotting)

      • save <seconds> <changes>: 定义触发 RDB 快照的条件。例如:
        save 900 1 # 900秒内至少1个key改变
        save 300 10 # 300秒内至少10个key改变
        save 60 10000 # 60秒内至少10000个key改变
      • dbfilename dump.rdb (默认): RDB 文件名。
      • dir ./ (默认): RDB 和 AOF 文件存放目录。对于 MSI 安装,这通常是 Redis 安装目录。对于 WSL2,通常是 /var/lib/redis。建议修改为一个专门的数据存储目录,例如 dir C:\RedisData\data (Windows) 或 dir /var/redis_data (WSL2)。确保 Redis 进程有权限。
    • AOF (Append Only File)

      • appendonly no (默认): 禁用 AOF。
      • appendonly yes: 启用 AOF。AOF 提供更好的数据持久性(通常最多丢失1秒的数据)。
      • appendfilename "appendonly.aof" (默认): AOF 文件名。
      • appendfsync everysec (默认): 每秒同步一次 AOF 文件到磁盘。还有 always (每次写入都同步,最安全但最慢) 和 no (由操作系统决定何时同步,最快但最不安全)。everysec 是一个很好的折中。

    同时启用 RDB 和 AOF 是可以的。当 Redis 重启时,如果 AOF 开启,会优先从 AOF 文件恢复数据,因为它通常更完整。

4.3 应用配置更改

修改完 redis.conf 文件后,需要重启 Redis 服务才能使更改生效。

  • MSI 安装 (Windows 服务)

    1. 打开 “服务” (services.msc)。
    2. 找到 “Redis” 服务。
    3. 右键点击,选择 “重新启动”。
  • WSL2 (Linux 服务)

    1. 在 WSL2 的 Linux 终端中执行:
      bash
      sudo service redis-server restart

5. 管理 Redis 服务

5.1 Windows 服务 (MSI 安装)

  • 启动服务net start Redis (在 CMD 中以管理员身份) 或通过 services.msc
  • 停止服务net stop Redis 或通过 services.msc
  • 查看状态:通过 services.msc
  • 卸载服务:如果需要手动将 Redis 注册为服务或卸载服务(例如,使用 ZIP 包安装时):
    • 注册服务:redis-server --service-install redis.windows.conf --loglevel verbose --service-name "MyRedisService"
    • 卸载服务:redis-server --service-uninstall --service-name "MyRedisService"
    • 启动服务:redis-server --service-start --service-name "MyRedisService"
    • 停止服务:redis-server --service-stop --service-name "MyRedisService"
      (确保 redis.windows.conf 是你实际的配置文件名,--service-name 是可选的自定义服务名)

5.2 Linux 服务 (WSL2)

  • 启动服务sudo service redis-server start
  • 停止服务sudo service redis-server stop
  • 重启服务sudo service redis-server restart
  • 查看状态sudo service redis-server status
  • 设置为开机自启 (systemd)
    bash
    sudo systemctl enable redis-server
    sudo systemctl start redis-server

    (注意:WSL2 对 systemd 的原生支持需要较新版本的 WSL。如果 systemctl 不可用,则 service 命令是主要方式。)

6. 测试 Redis 连接与操作

使用 redis-cli (Redis 命令行界面) 进行测试。

  1. 打开 CMD 或 PowerShell (对于 MSI 安装) 或 WSL2 终端。
  2. 连接到 Redis:

    • 如果 Redis 在本机且未设置密码:redis-cli
    • 如果 Redis 在本机,端口为 6380redis-cli -p 6380
    • 如果 Redis 在远程主机 192.168.1.100,端口 6379,密码 YourStrongPasswordHere
      redis-cli -h 192.168.1.100 -p 6379 -a YourStrongPasswordHere
    • 如果已连接,但需要认证:AUTH YourStrongPasswordHere
  3. 基本操作:

    • PING -> (应返回 PONG)
    • SET mykey "Hello Windows Redis" -> (应返回 OK)
    • GET mykey -> (应返回 "Hello Windows Redis")
    • INCR counter -> (返回递增后的数字)
    • DEL mykey -> (返回 1 表示成功删除一个键)
    • FLUSHALL -> (清空所有数据库的所有键,慎用! )
    • INFO memory -> (查看内存使用情况)
    • QUIT -> (退出 redis-cli)

7. 安全加固

Redis 暴露在公网而未加保护是非常危险的。以下是关键安全措施:

  1. 设置强密码 (requirepass):已在配置部分强调,这是最重要的。
  2. 绑定到特定 IP (bind):如果 Redis 不需要被网络上所有机器访问,将其绑定到 127.0.0.1 (仅本机) 或特定的内部 IP 地址。
  3. 防火墙
    • Windows 防火墙:确保只允许受信任的 IP 地址或网络访问 Redis 端口 (默认为 6379)。MSI 安装时可以选择自动添加规则,否则需手动配置。
    • WSL2:WSL2 的网络行为更像一个独立的虚拟机。Windows 防火墙规则也适用于 WSL2 暴露的端口。
  4. 重命名或禁用危险命令 (rename-command)
    redis.conf 中,你可以重命名或禁用一些高危命令,如 FLUSHALL, FLUSHDB, KEYS, CONFIG 等,以防止误操作或恶意攻击。
    例如,禁用 FLUSHALL
    rename-command FLUSHALL ""
    例如,将 CONFIG 重命名为一个难以猜测的字符串:
    rename-command CONFIG "VERY_SECRET_CONFIG_CMD_aXbYcZ"
  5. 以非特权用户运行 (Linux/WSL2):虽然 MSI 安装的 Windows 服务有其自己的用户上下文,但在 Linux/WSL2 环境中,确保 Redis 服务不是以 root 用户运行(apt install redis-server 通常会创建一个 redis 用户来运行服务)。
  6. SSL/TLS 加密 (高级):对于敏感数据传输,可以考虑使用 SSL/TLS 代理 (如 stunnel 或 Nginx) 来加密 Redis 通信,或者使用支持 SSL/TLS 的 Redis 版本 (官方从 Redis 6 开始原生支持 SSL/TLS,但 MSOpenTech 的旧版 Windows 包不支持)。在 WSL2 中运行最新版 Redis 可以利用此特性。
  7. 定期更新:虽然 Windows 原生版更新较慢,但如果你使用 WSL2 或 Docker,应定期更新 Redis 到最新稳定版以获取安全补丁和新功能。

8. 性能考量与优化 (简述)

  • 内存:确保为 Redis 分配足够的 maxmemory,并为操作系统和其他应用留出余地。
  • 持久化策略:AOF 通常比 RDB 更安全,但 appendfsync everysec 会有少量性能开销。如果对数据丢失容忍度较高,可以调整 save 参数或完全依赖 RDB。
  • 网络延迟:将 Redis 服务器尽可能靠近应用程序服务器部署。
  • 客户端连接池:应用程序应使用连接池来管理与 Redis 的连接,避免频繁创建和销毁连接。
  • 避免慢查询:避免使用如 KEYS * 这样会阻塞服务器的命令,尤其是在大数据集上。使用 SCAN 代替 KEYS
  • 数据结构优化:根据场景选择合适的 Redis 数据结构。
  • MSI vs WSL2:普遍认为 WSL2 上的 Redis 性能会优于旧的 MSOpenTech Windows 移植版,因为它更接近原生 Linux 环境。

9. 故障排查

  • 无法连接
    • 检查 Redis 服务是否正在运行。
    • 检查 bind 配置是否允许你的客户端 IP 连接。
    • 检查防火墙规则是否允许 Redis 端口。
    • 检查密码是否正确 (AUTHredis-cli -a password)。
  • 服务无法启动
    • 查看 Redis 日志文件 (logfile 配置项指定的位置)。
    • 查看 Windows 事件查看器 (系统日志或应用程序日志) 中是否有相关错误 (针对 Windows 服务)。
    • 检查配置文件语法是否正确。
    • 检查端口是否被其他程序占用 (netstat -ano | findstr "6379").
  • 内存不足
    • 调整 maxmemorymaxmemory-policy
    • 分析键空间,删除不必要的键或设置过期时间。

10. 结论

在 Windows Server 上安装和配置 Redis 服务是完全可行的,尤其是在利用 WSL2 或 Docker 等现代化技术时。虽然 MSOpenTech 的旧版 MSI 安装包提供了一种快速入门的方式,但对于生产环境或追求更好性能和最新特性的场景,强烈推荐使用 WSL2 运行标准的 Linux 版 Redis。

无论选择哪种方式,正确的配置(特别是内存限制、密码保护和持久化策略)以及健全的安全措施(如防火墙和命令重命名)对于确保 Redis 服务的稳定、高效和安全运行至关重要。通过本文的指引,你应该能够在 Windows Server 环境中成功部署和管理 Redis 缓存服务,为你的应用程序提供强大的性能支持。


希望这篇文章能满足你的要求!它涵盖了安装、配置、管理、安全和故障排查等多个方面,并提供了两种主要的安装路径。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部