[TOC] #### 1. 前言 --- 在 Ubuntu 24.04 服务器上安装 Redis 主要有两种方式: + 通过 Ubuntu 官方仓库安装 (apt),简单快捷,适合大多数场景 + 通过 Redis 官方源安装,可以获取到最新的稳定版本(适合需要安装指定版本的场景) #### 2. 包管理器安装 Redis --- 这是最简单、最稳定的安装方式,适合快速部署,Ubuntu 24.04 的官方仓库中通常是 Redis 7.x 版本,较新且稳定。 使用 `apt` 包管理器直接安装 `redis-server` 包 ```bash # 更新系统软件包列表,以确保安装的是最新版本 sudo apt update # 安装 redis sudo apt install redis-server -y ``` 安装完成后,启动 Redis 服务,并设置开机自启 ```bash sudo systemctl start redis-server sudo systemctl enable redis-server ``` 检查 Redis 服务状态,确认它正在运行【如果看到 active (running) 的绿色字样,说明服务已经成功启动】 ```bash sudo systemctl status redis-server ``` 也可以通过 Redis 客户端工具测试连接(如果返回 PONG,说明 Redis 正常运行) ```bahs redis-cli ping ``` #### 3. Redis 源码包编译安装 --- ##### 编译安装 Redis 源码包编译安装过程主要分为:准备编译环境、下载解压源码、编译与安装、配置 Redis 准备编译环境,安装 build-essential(包含 gcc,make): ```bash sudo apt install build-essential -y ``` 下载 Redis 源码包主要有两种最可靠方式: + 官方下载站:<https://download.redis.io/releases> + GitHub 官方仓库:<https://github.com/redis/redis> 从 Redis 官方源下载最新的稳定版源码并解压源码(以 Redis 7.4.8 为例): ```bash cd /usr/local/src sudo wget https://download.redis.io/releases/redis-7.4.8.tar.gz sudo tar xzf redis-7.4.8.tar.gz ``` 编译与安装:这是核心步骤,我们将使用 `make` 命令来编译代码 编译源码: ```bash # 进入源码目录 cd redis-7.4.8 # 为了加快编译速度,可以使用 -j$(nproc) 参数利用所有 CPU 核 sudo make -j$(nproc) ``` 安装到系统: ```bash # 编译完成后,将 Redis 的可执行文件安装到系统目录(通常是 /usr/local/bin) sudo make install ``` 验证安装(检查版本号以确认安装成功): ```bash redis-cli --version redis-server --version ``` ##### 守护进程 我们已经安装好 Redis,现在只需要启动 Redis 服务就可以使用了,进入安装目录,运行 bin 目录的 `redis-server`: + 这种启动方式需要一直打开窗口,关闭终端窗口 Redis 服务就关掉了,很不方便 ```bash /usr/local/bin/redis-server ``` 我们可以用守护进程方式启动服务,让服务在后台运行,具体怎么操作 ?请继续往下看 复制默认配置文件: ```bash # 创建配置文件存在目录 sudo mkdir -p /etc/redis # 进入源码目录(当前终端如果不在此处,需要执行一下) cd /usr/local/src/redis-7.4.8 # 将源码目录中的配置文件拷贝到我们创建的目录下 sudo cp redis.conf /etc/redis/redis.conf ``` 编辑配置文件:找到 `daemonize no`,修改为 `daemonize yes` ```bash sudo nano /etc/redis/redis.conf ``` 重新启动 Redis 服务,指定使用的配置文件(关闭终端服务也在运行): ```bash /usr/local/bin/redis-server /etc/redis/redis.conf ``` 以守护进程方式启动的 Redis 服务,怎么关闭掉它呢 ? ```bash # 最推荐的关闭方式(优雅关闭:正常关闭数据、安全退出进程) redis-cli shutdown # 如果端口不是 6379,要指定端口 redis-cli -p 6379 shutdown ``` 如果你是通过 `apt` 安装的 Redis,那么关闭方式是: ```bash # 启动服务 sudo systemctl start redis # 关闭服务 sudo systemctl stop redis ``` 强制关闭:如果实现关不掉,可以通过杀死进程的方式来关闭(不推荐:数据可能丢失,AOF 可能损坏) ```bash # 找进程(可以看到 redis 进程 ID) ps -aux | grep redis # 杀进程(67603 是我的进程ID,要修改你实际的进程ID) kill -9 67603 ``` ##### 开机自启 为了让 Redis 像系统服务一样运行,我们需要配置 `systemd`,实现开机自启 Redis 服务 首先,我们需要在 `redis.conf` 中找到并修改两个关键参数: ```bash sudo nano /etc/redis/redis.conf ``` | 参数 | 默认值 | 必须修改为 | 原因 | | ------------ | ------------ | ------------ | ------------ | | daemonize | yes | no | 必须让 systemd 在前台管理进程,否则服务会显示“启动成功”但实际已退出 | | supervised | - | systemd | 告诉 Redis 它是被 systemd 管理的,以便正确传递状态 | 创建 redis 系统服务文件: ```bash sudo vim /etc/systemd/system/redis.service ``` ```plaintext [Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=root Group=root ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf ExecStop=/usr/local/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target ``` 重载 systemd 配置,启动 Redis 服务 ```bash # 重新加载 systemd 配置 sudo systemctl daemon-reload # 立即启动 Redis sudo systemctl start redis # 设置开机自启 sudo systemctl enable redis ``` 命令补充: ```bash sudo systemctl stop redis sudo systemctl status redis ``` #### 4. 连接 Redis 服务器 --- `redis-cli` 是 Redis 自带的命令行工具,用于与 Redis 服务器进行交互。 最通用的连接命令格式: + `-h <host>`:指定 Redis 服务器的 IP 地址或域名 + `-p <port>`:指定 Redis 服务器的端口号,默认为 6379 + `-a <password>`:指定连接密码。如果未设置密码,则无需该参数 ```plaintext redis-cli -h <host> -p <port> -a <password> ``` 连接本地 Redis 服务器,直接运行 `redis-cli` 即可连接到 `127.0.0.1:6379` ```bash redis-cli ``` 连接远程 Redis 服务(没有密码,Redis 安装后默认是没有密码的) ```bash redis-cli -h 192.168.1.100 -p 6379 ``` 连接远程 Redis 服务(有密码) ```bash redis-cli -h 192.168.1.100 -p 6379 -a mypassword ``` 不要在命令中直接使用 `-a` 参数附带密码,因为密码可能会暴露在命令历史记录或进程列表中(会有警告提示) + Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. ```bash redis-cli -h 192.168.1.38 -p 6379 -a foo123 ``` 更安全的做法是: + 先执行不带 `-a` 参数的连接命令 + 然后在 `redis-cli` 的交互式提示符下,使用 `auth` 命令进行认证 ```bash # 1. 执行连接命令,不带密码 redis-cli -h 192.168.1.38 -p 6379 # 2. 连接成功后,在 redis 提示符下执行 auth foo123 192.168.1.38:6379> auth foo123 ``` #### 5. 配置远程访问详解 --- 默认情况下,Redis 只能在本地访问,且没有密码。我们需要修改配置文件以允许远程连接并设置密码。 日常开发中,你可能会遇到以下需求或问题: + 本地开发时想要连接远程服务器上的 Redis 进行调试 + 本地虚拟机装的 Redis 在宿主机中无法通过连接工具访问 修改 Redis 配置文件,如果不知道配置文件在哪可以通过以下命令查找: ```bash sudo find / -name redis.conf ``` 通过 `apt` 命令安装的 Redis,配置文件默认位于:`/etc/redis/redis.conf` 解决方案(修改以下两个配置项,然后重启 Redis 服务,这是开发环境最常用的方式): + 修改绑定地址:将 `bind 127.0.0.1 -::1` 改为 `bind 0.0.0.0` + 关闭保护模式:将 `protected-mode yes` 改为 `protected-mode no` 默认情况下,只能在服务器本地访问 `Redis`,局域网或其他设备无法连接,以下是 `bind` 的默认值 + 仅监听本地回环地址 `127.0.0.1`(IPv4)和 `::1`(IPv6),所以只能本地连接 ```plaintext bind 127.0.0.1 -::1 ``` 当将 `bind` 设置为 `0.0.0.0` 时,Redis 将监听所有网络接口,包括局域网地址和公网地址(如何服务器有公网 IP) ```plaintext bind 0.0.0.0 ``` Redis 的 `protected-mode`(保护模式) 是一种安全机制,防止未经授权的访问而设计的一个保护模式 默认情况下,`protected-mode yes` 此时 Redis 会判断有没有设置密码,没有密码远程连接将无法操作 Redis 数据 + 保护模式开启并且没有密码时,只允许本地服务器操作数据 + 远程的连接想要操作 Redis 数据应该设置密码或者将其保护模式关闭掉 默认情况下,配置文件 redis.conf 中 Redis 密码的默认配置如下所示,也就是没有密码 ```plaintext # requirepass foobared ``` 设置密码示例:将密码修改为 `foo123`,然后重启 Redis 服务 ```plaintext requirepass foo123 ```