Redis 安装教程:从下载到运行 – wiki基地


Redis 安装教程:从下载到运行

Redis(Remote Dictionary Server)是一个开源的、内存中的数据结构存储系统,可以用作数据库、缓存和消息代理。它支持多种数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。由于其数据存储在内存中,Redis 提供了极高的读写性能,使其成为构建高性能应用的理想选择。

本文将详细介绍如何在 Linux/macOS 环境下,从源码编译的方式安装 Redis。源码安装虽然比使用包管理器稍显复杂,但能让你安装最新版本的 Redis,并更好地理解其构建过程。

1. 准备工作和环境要求

在开始安装之前,请确保你的系统满足以下基本要求:

  • 操作系统: Linux 或 macOS。Redis 的官方推荐和主要开发平台是 Linux。Windows 用户可以考虑使用 WSL2 (Windows Subsystem for Linux) 或 Microsoft 维护的非官方 Windows 移植版本,但本文主要聚焦于 Linux/macOS 的源码安装。
  • 编译器: 需要安装 C 语言编译器,通常是 GCC 或 Clang。
  • 构建工具: 需要 make 工具。
  • 下载工具: 需要 wgetcurl 来下载源码包。
  • 其他依赖: 可能需要一些开发库,具体取决于你的系统和 Redis 版本,但通常 make 会在编译过程中提示缺失的依赖。

在基于 Debian/Ubuntu 的系统上安装必需的构建工具:

bash
sudo apt update
sudo apt install build-essential tcl -y

* build-essential 包含 GCC、make 等基本构建工具。
* tcl 是 Redis 官方测试套件的依赖。虽然不是必须,但强烈建议安装以便运行测试。

在基于 RHEL/CentOS/Fedora 的系统上安装必需的构建工具:

bash
sudo yum update
sudo yum groupinstall 'Development Tools' -y
sudo yum install tcl -y

或对于较新版本使用 dnf:
bash
sudo dnf update
sudo dnf groupinstall 'Development Tools' -y
sudo dnf install tcl -y

在 macOS 上使用 Homebrew 安装必需的工具:

macOS 通常自带 Clang 和 make。如果需要安装 wgettcl,可以使用 Homebrew:

bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install wget tcl

确认所有必需的工具都已安装完毕后,就可以开始下载 Redis 源码了。

2. 下载 Redis 源码

访问 Redis 官方网站 (redis.io) 的下载页面,获取最新稳定版本的源码包下载链接。例如,在撰写本文时,最新稳定版可能是 7.2.x。

使用 wgetcurl 在终端中下载源码包。例如,如果最新版本是 7.2.4,下载命令如下:

“`bash

使用 wget 下载

wget https://download.redis.io/releases/redis-7.2.4.tar.gz

或者使用 curl 下载

curl -O https://download.redis.io/releases/redis-7.2.4.tar.gz
``
请将
7.2.4替换为你实际要下载的版本号。通常建议下载稳定版 (stable),而不是开发版 (unstable`)。

下载完成后,你会在当前目录看到一个名为 redis-x.y.z.tar.gz 的压缩包文件。

3. 解压源码包

使用 tar 命令解压下载的 .tar.gz 压缩包:

bash
tar -xzf redis-7.2.4.tar.gz

这会在当前目录下创建一个名为 redis-7.2.4 的新目录,其中包含了 Redis 的所有源码文件。

进入到解压后的源码目录:

bash
cd redis-7.2.4

现在,你已经进入了 Redis 源码的根目录,可以开始编译过程了。

4. 编译 Redis

进入源码目录后,执行 make 命令来编译 Redis:

bash
make

这个命令会自动检测你的系统环境,并调用 C 编译器(如 GCC)来编译 Redis 的所有源文件。编译过程可能需要一些时间,具体取决于你的系统性能。

在编译过程中,你将看到编译器输出的各种信息。如果一切顺利,make 命令会在最后输出类似以下内容(取决于版本):

“`

Hint: To run ‘make test’, you need Tcl 8.5 or newer.
Hint: It’s recommended to run ‘make test’.

    INSTALLATION:

    It's a good idea to run 'make test' ;--).

    `make install` will install Redis bin in /usr/local/bin

“`

这意味着编译成功。

可选但强烈推荐:运行测试

Redis 提供了完整的自动化测试套件,用于验证编译后的程序是否正常工作。运行测试需要安装 Tcl(如前所述)。

make 成功后,执行以下命令运行测试:

bash
make test

测试过程可能需要几分钟到十几分钟不等。如果所有测试都通过,你会看到类似 \o/ All tests passed without errors! 的输出。

如果某些测试失败,请检查 make test 的输出信息,可能是你的环境有问题,或者在极少数情况下,可能是 Redis 的 bug。对于初次安装,确保 tcl 已安装,并且没有看到明显的编译器错误通常意味着测试应该能通过。

5. 安装 Redis 二进制文件

编译成功并通过测试后,就可以将编译好的 Redis 可执行文件安装到系统路径中,以便在任何地方都能直接运行。

使用 make install 命令来安装:

bash
sudo make install

sudo 是必需的,因为默认情况下 make install 会尝试将 Redis 的可执行文件(如 redis-server, redis-cli 等)安装到 /usr/local/bin 目录,这是一个系统级别的路径,需要管理员权限。

make install 命令会将以下几个重要的可执行文件复制到 /usr/local/bin/ 目录下:

  • redis-server: Redis 服务器的守护进程。
  • redis-cli: Redis 命令行客户端,用于与 Redis 服务器交互。
  • redis-benchmark: Redis 性能测试工具。
  • redis-check-aof: AOF (Append Only File) 持久化文件修复工具。
  • redis-check-dump: RDB (Redis Database) 持久化文件检查工具。

安装完成后,你可以通过在终端中输入相应的命令来检查它们是否可用:

bash
redis-server --version
redis-cli --version

如果能正确显示版本信息,说明 Redis 二进制文件已成功安装到系统路径中。

6. 配置 Redis

Redis 的行为可以通过配置文件 redis.conf 进行详细设置。源码包中提供了一个示例配置文件,我们需要将其复制到标准的系统配置目录下,并进行一些必要的修改。

首先,创建一个标准的配置目录(如果不存在的话),例如 /etc/redis/

bash
sudo mkdir /etc/redis

然后,将源码目录下的示例配置文件复制到这个新创建的目录:

bash
sudo cp redis.conf /etc/redis/

注意:这里假设你还在 Redis 源码目录 redis-7.2.4 下。如果你已经离开了,需要指定 redis.conf 的完整路径,例如 /path/to/redis-7.2.4/redis.conf

现在,你需要编辑 /etc/redis/redis.conf 文件来配置 Redis 服务器。使用你喜欢的文本编辑器打开它:

“`bash
sudo nano /etc/redis/redis.conf

或者使用 vim

sudo vim /etc/redis/redis.conf

“`

以下是一些重要的配置项,你可能需要根据需求进行修改:

  • daemonize no: 这个选项控制 Redis 是否作为守护进程在后台运行。
    • no (默认): Redis 会在前台运行,终端会一直显示日志输出。这对于调试很有用,但不适合生产环境。
    • yes: Redis 会在后台作为守护进程运行。通常在手动启动或使用 SysVinit 脚本时使用。
    • 重要提示: 如果你打算使用 Systemd (现代 Linux 发行版的主流服务管理工具) 来管理 Redis 服务,通常建议将此项设置为 no,因为 Systemd 本身负责进程的后台管理。在 Systemd 服务文件中指定 ExecStart 即可。在本文后面我们将使用 Systemd,所以这里建议保持或修改为 daemonize no
  • pidfile /var/run/redis_6379.pid: 当 daemonize 设置为 yes 时,Redis 会将自己的进程 ID 写入到这个文件。如果你使用 Systemd 且 daemonize no,这个选项通常不需要,或者在服务文件中另行配置。
  • port 6379: Redis 监听的端口号。默认是 6379。
  • bind 127.0.0.1 -::1: Redis 监听的 IP 地址。默认是本地环回地址(IPv4 和 IPv6),这意味着只能从本机访问 Redis。如果需要从其他机器访问,你需要将其修改为服务器的实际 IP 地址或 0.0.0.0 (监听所有可用 IP,注意安全风险)。
  • protected-mode yes: 保护模式。当设置为 yesbind 不是 0.0.0.0 时,如果 Redis 没有设置密码或启用 TLS/SSL,将只允许本地连接。如果设置为 no (不推荐,除非你清楚风险并有其他安全措施),即使没有密码和 TLS,也会接受非本地连接。
  • logfile "": 指定日志文件路径。默认是空字符串,表示将日志输出到标准输出(如果 daemonize no)或 syslog(如果 daemonize yes)。建议指定一个路径,例如 /var/log/redis/redis.log,方便排查问题。记得创建 /var/log/redis 目录并给予 Redis 进程写入权限。
  • dir ./: Redis 工作目录。持久化文件(RDB 快照和 AOF 文件)默认会保存在这个目录下。建议修改为一个专门的目录,例如 /var/lib/redis。记得创建该目录并给予 Redis 进程读写权限。
  • databases 16: 可用的数据库数量,默认 16。
  • save <seconds> <changes>: 持久化配置。例如 save 900 1 表示在 900 秒(15分钟)内至少有 1 个 key 发生变化时,自动进行 RDB 持久化。可以配置多个 save 规则。
  • requirepass foobared: 设置连接密码。默认没有密码。在生产环境中强烈建议设置一个复杂且安全的密码。

根据你的需求修改这些配置项,然后保存并关闭文件。

创建日志和工作目录 (如果修改了 logfile 和 dir):

如果修改了 logfiledir 配置项指向的目录(例如 /var/log/redis/var/lib/redis),你需要手动创建这些目录并设置正确的权限。通常,Redis 进程会以一个非 root 用户运行(推荐的方式),你需要确保这个用户对这些目录有写入权限。

“`bash
sudo mkdir /var/log/redis
sudo mkdir /var/lib/redis

假设你将使用一个名为 ‘redis’ 的用户来运行 Redis 进程

sudo chown redis:redis /var/log/redis

sudo chown redis:redis /var/lib/redis

如果不确定,可以暂时给予更宽松的权限或在 Systemd 配置中指定用户和组

“`

7. 运行 Redis 服务器

有两种主要方式可以启动 Redis 服务器:前台运行或后台运行(守护进程)。

7.1 前台运行 (用于测试或调试)

以前台方式启动 Redis,只需要执行 redis-server 命令,并可以选择性地指定配置文件:

bash
redis-server /etc/redis/redis.conf

如果 daemonize 在配置文件中设置为 no,Redis 将会一直运行在前台,并在终端输出日志。按 Ctrl+C 可以停止服务器。

7.2 后台运行 (作为守护进程 – 不推荐与 Systemd 同时使用)

如果你在配置文件 /etc/redis/redis.conf 中将 daemonize 设置为 yes,可以直接通过指定配置文件来启动 Redis 作为守护进程:

bash
redis-server /etc/redis/redis.conf

执行此命令后,Redis 会在后台运行,并立即返回命令行提示符。你可以使用 ps aux | grep redis 命令来查看 Redis 进程是否正在运行。

注意: 如前所述,当使用 Systemd 管理服务时,通常将 daemonize 设置为 no,让 Systemd 来负责进程管理。下面的 Systemd 部分将介绍这种更现代和推荐的方式。

8. 将 Redis 配置为系统服务 (推荐用于生产环境)

为了让 Redis 在系统启动时自动启动,并在后台稳定运行,推荐将其配置为一个系统服务。现代 Linux 发行版大多使用 Systemd。

以下是为 Redis 创建一个 Systemd 服务单元文件的步骤:

创建一个服务单元文件:

使用 root 权限创建一个新的 .service 文件,例如 /etc/systemd/system/redis.service

bash
sudo nano /etc/systemd/system/redis.service

将以下内容复制到文件中。请根据你的实际安装路径和配置进行调整:

“`ini
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]

这里假设 redis.conf 中的 daemonize 设置为 no

如果设置为 yes,需要添加 Type=forking 和 PIDFile=/var/run/redis_6379.pid (或你配置文件中的 pidfile 路径)

为了兼容性,建议使用 daemonize no 配合 Systemd 的 Type=exec

Type=exec
User=redis # 推荐创建一个专门的redis用户来运行,提高安全性
Group=redis # 推荐创建一个专门的redis用户来运行,提高安全性

执行启动命令,指定配置文件路径

这里的 /usr/local/bin/redis-server 是 make install 的默认安装路径

ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf

执行停止命令

ExecStop=/usr/local/bin/redis-cli shutdown

设置重启策略:任何非零退出码都会重启,不包括正常停止 (SIGINT, SIGTERM)

OnFailure 策略表示如果服务失败(例如崩溃),则重启

Restart=on-failure

如果指定了 User 和 Group,需要设置工作目录的权限

WorkingDirectory=/var/lib/redis # 可选,如果需要在特定目录启动

TimeoutStartSec=300 # 可选,启动超时时间

TimeoutStopSec=300 # 可选,停止超时时间

[Install]
WantedBy=multi-user.target
“`

重要说明:

  • User=redis / Group=redis: 为了安全,强烈建议创建一个专门的用户和组来运行 Redis 进程,而不是使用 root。例如:
    bash
    sudo adduser --system --no-create-home --group redis

    然后确保 /etc/redis/redis.conf 文件、dir 配置指定的目录以及 logfile 配置指定的目录(如果指定了)都属于 redis 用户和组,并且 Redis 用户有读写权限。
  • Type=exec vs Type=forking: 如果 redis.conf 中的 daemonize 设置为 no (推荐与 Systemd 配合),请使用 Type=exec。如果 daemonize 设置为 yes,需要使用 Type=forking 并指定 PIDFile。Systemd 更倾向于管理前台进程 (Type=exec)。
  • ExecStart: 确保 /usr/local/bin/redis-server 是你实际安装的 Redis 服务器路径。
  • ExecStop: 使用 redis-cli shutdown 是一个安全的停止方式,它会先执行数据持久化。

保存并关闭 .service 文件。

重新加载 Systemd 配置:

创建或修改了 Systemd 服务文件后,需要让 Systemd 重新加载其配置:

bash
sudo systemctl daemon-reload

启用 Redis 服务 (开机自启动):

使 Redis 服务在系统启动时自动启动:

bash
sudo systemctl enable redis

启动 Redis 服务:

立即启动 Redis 服务:

bash
sudo systemctl start redis

检查 Redis 服务状态:

查看 Redis 服务的运行状态、PID、日志等信息:

bash
sudo systemctl status redis

如果服务正常运行,你会看到 active (running) 的状态。

停止 Redis 服务:

如果需要停止 Redis 服务:

bash
sudo systemctl stop redis

禁用 Redis 服务 (取消开机自启动):

如果不想让 Redis 在开机时自动启动:

bash
sudo systemctl disable redis

通过 Systemd 管理 Redis 服务是生产环境中最常见和推荐的方式。

9. 连接到 Redis 并进行基本操作

Redis 服务器运行后,你可以使用 redis-cli 客户端连接到它并执行命令。

如果 Redis 运行在默认端口 6379 且监听本地地址,直接执行 redis-cli 即可:

bash
redis-cli

如果 Redis 运行在不同的主机或端口,使用 -h-p 选项:

bash
redis-cli -h <hostname> -p <port>

例如,连接到 IP 地址 192.168.1.100 的 6380 端口:

bash
redis-cli -h 192.168.1.100 -p 6380

连接成功后,你会看到 Redis 命令行提示符:127.0.0.1:6379> (或你连接的地址)。

执行一些基本命令来验证:

  • 检查连接:
    127.0.0.1:6379> ping
    PONG

    如果返回 PONG,说明连接成功且服务器正常响应。
  • 设置一个键值对:
    127.0.0.1:6379> SET mykey "Hello Redis"
    OK
  • 获取一个键的值:
    127.0.0.1:6379> GET mykey
    "Hello Redis"
  • 查看服务器信息:
    127.0.0.1:6379> INFO
    会输出关于服务器的各种详细信息。
  • 退出客户端:
    127.0.0.1:6379> quit

这些基本操作验证了 Redis 服务器已成功安装、配置并正常运行。

10. 其他安装方式 (简述)

虽然源码安装提供了最大的灵活性并能获取最新版本,但对于开发或测试环境,或者如果你不追求最新版本,可以使用包管理器快速安装:

  • Debian/Ubuntu:
    bash
    sudo apt update
    sudo apt install redis-server

    这会安装一个由发行版维护的 Redis 版本,通常会自带 Systemd 服务配置。
  • RHEL/CentOS/Fedora:
    bash
    sudo yum install redis
    # 或 sudo dnf install redis

    同样会安装一个发行版维护的版本。
  • macOS (使用 Homebrew):
    bash
    brew install redis

    Homebrew 也会提供启动/停止服务的方式。
  • Docker: 使用 Docker 容器是另一种快速启动 Redis 实例的方式,非常适合隔离环境或开发。
    bash
    docker pull redis
    docker run --name my-redis -d -p 6379:6379 redis

    这会在一个 Docker 容器中以后台模式运行 Redis,并将容器的 6379 端口映射到主机的 6379 端口。

这些方式都比源码安装简单快捷,但你可能无法立即获得最新发布的 Redis 特性或 bug 修复,并且配置文件的位置和管理方式可能略有不同。

11. 常见问题和故障排除

  • make 失败: 检查是否安装了 build-essential (GCC/Clang, make) 或 Development Tools。查看 make 输出的错误信息,通常会提示缺少哪些库或头文件。
  • make test 失败: 检查是否安装了 tcl
  • sudo make install 提示权限错误: 确保使用了 sudo,并且当前用户有执行 sudo 的权限。
  • redis-server 命令找不到: 确保 /usr/local/bin 目录在你的系统 PATH 环境变量中。make install 默认安装到这里,如果 PATH 正确配置,应该可以直接执行。
  • 无法连接到 Redis:
    • 检查 Redis 服务器是否正在运行 (sudo systemctl status redisps aux | grep redis)。
    • 检查防火墙设置,确保 Redis 端口 (默认 6379) 允许外部连接 (如果不是只从本机访问)。
    • 检查 redis.conf 中的 bind 设置,确保 Redis 监听了正确的 IP 地址。
    • 如果设置了密码 (requirepass),连接时需要使用 redis-cli -a your_password 或连接后使用 AUTH your_password 命令进行认证。
  • Redis 启动后立即退出: 查看 Redis 的日志文件 (redis.conflogfile 指定的路径) 或使用 sudo systemctl status redis 查看服务日志,错误信息通常会在那里。常见原因包括配置文件错误、端口被占用、工作目录或日志文件没有写入权限等。
  • Systemd 服务启动失败: 使用 sudo systemctl status redis 查看详细错误日志。检查 .service 文件中的 ExecStart 路径、User/Group 设置及对应目录权限、redis.conf 文件路径和内容是否正确。

12. 总结

通过源码安装 Redis,你不仅能获得最新版本的 Redis,还能对安装过程有更深入的了解。从下载、解压、编译、测试到安装二进制文件,每一步都是构建软件的标准流程。接着,配置 redis.conf 文件是调整 Redis 行为的关键步骤,务必根据你的实际需求(如端口、绑定地址、密码、持久化等)进行修改。最后,将 Redis 配置为 Systemd 服务,是保证其在生产环境中稳定、可靠运行的推荐方式。

掌握了这些步骤,你就可以成功在 Linux/macOS 环境下搭建并运行 Redis 服务器了。接下来,你可以深入学习 Redis 的各种数据结构、命令、持久化机制、主从复制、Sentinel 高可用以及 Cluster 分布式方案等高级特性,将 Redis 应用到你的项目中。

希望这篇详细教程对你有所帮助!


发表评论

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

滚动至顶部