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
工具。 - 下载工具: 需要
wget
或curl
来下载源码包。 - 其他依赖: 可能需要一些开发库,具体取决于你的系统和 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。如果需要安装 wget
或 tcl
,可以使用 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。
使用 wget
或 curl
在终端中下载源码包。例如,如果最新版本是 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
: 保护模式。当设置为yes
且bind
不是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):
如果修改了 logfile
和 dir
配置项指向的目录(例如 /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
vsType=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 redis
或ps aux | grep redis
)。 - 检查防火墙设置,确保 Redis 端口 (默认 6379) 允许外部连接 (如果不是只从本机访问)。
- 检查
redis.conf
中的bind
设置,确保 Redis 监听了正确的 IP 地址。 - 如果设置了密码 (
requirepass
),连接时需要使用redis-cli -a your_password
或连接后使用AUTH your_password
命令进行认证。
- 检查 Redis 服务器是否正在运行 (
- Redis 启动后立即退出: 查看 Redis 的日志文件 (
redis.conf
中logfile
指定的路径) 或使用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 应用到你的项目中。
希望这篇详细教程对你有所帮助!