Ubuntu 22.04 安装 Redis 8 指南
在 Ubuntu 22.04 上通过 Redis 官方仓库(packages.redis.io)安装最新稳定版 Redis 8(8.10.2),完成初始化、启动、持久化与安全配置。安装过程在 Ubuntu 22.04 服务器环境实测验证,并补充离线安装(断网)方案及官方 tar.gz 源码离线安装
Ubuntu 22.04 安装 Redis 8 指南
目标:在 Ubuntu 22.04 上通过 Redis 官方仓库(packages.redis.io)安装最新稳定版 Redis 8(8.10.2),完成初始化、启动、持久化与安全配置。安装过程在真实 Ubuntu 22.04 服务器实测验证。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS
- 系统架构:x86_64
- 内核版本:6.8.0-138-generic
- 包管理器:apt
- Redis 版本:8.10.2(软件包 6:8.10.2-1rl1~jammy1,含 redis-server / redis-cli / redis-tools)
- 软件源:Redis 官方仓库
packages.redis.io/deb - 配置文件:
/etc/redis/redis.conf - 数据目录:
/var/lib/redis - 日志文件:
/var/log/redis/redis-server.log
二、基础环境准备
2.1 前置条件
- 拥有 root 权限或 sudo 权限
- 网络可访问 Redis 官方仓库(
packages.redis.io) - 服务器已更新到最新状态:
sudo apt update && sudo apt upgrade -y - 已安装基础工具:
curl、ca-certificates、gnupg(用于下载并校验 GPG 密钥)
2.2 版本选型说明
Redis 官方提供了两个主要安装来源:
| 来源 | 版本 | 特点 |
|---|---|---|
Ubuntu 默认源(archive.ubuntu.com) | Redis 7.0(Ubuntu 22.04 固定) | 版本较旧,无新特性 |
Redis 官方仓库(packages.redis.io) | Redis 8.10.2(最新稳定版) | 含全部小版本安全修复,支持新特性 |
💡 说明:Ubuntu 22.04 的默认源只提供 Redis 7.0。如需使用最新稳定版,必须添加 Redis 官方仓库。本文档采用官方仓库安装 Redis 8.10.2(当前最新稳定版本,8 系列)。
三、在线安装方案(官方仓库 packages.redis.io)
3.1 更新软件源
安装前先刷新 apt 软件包索引,确保能获取最新的软件包信息。
执行命令:
sudo apt-get update
执行结果:
Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Fetched 48.2 MB in 10s (4748 kB/s)
Reading package lists... Done
💡 命令解释:
apt-get update从配置的软件源下载最新的软件包索引列表,不安装任何软件,只更新"可安装软件"的目录。
💡 说明:
Reading package lists... Done表示本地软件包索引已更新完成,可以开始安装。
3.2 安装前置工具
安装下载 GPG 密钥所需的工具。
执行命令:
sudo apt-get install -y curl ca-certificates gnupg
执行结果:
curl is already the newest version.
ca-certificates is already the newest version.
gnupg is already the newest version.
0 upgraded, 0 newly installed, 0 to remove.
💡 命令解释:
curl用于下载 GPG 密钥;ca-certificates提供 HTTPS 证书校验;gnupg提供 GPG 签名校验能力;-y自动确认安装。
💡 说明:这些工具在多数 Ubuntu 22.04 系统中已预装。若均为最新版本,则输出
0 newly installed。
3.3 导入 Redis 官方 GPG 密钥
导入 Redis 官方仓库的签名密钥,用于验证软件包的完整性与来源。
执行命令:
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
执行结果:
(无输出,执行成功)
💡 命令解释:
curl -fsSL静默下载(-f失败不输出错误页、-s静默、-S显示错误、-L跟随重定向);gpg --dearmor将 ASCII 装甲格式的公钥转为二进制 keyring 文件;/usr/share/keyrings/是 APTsigned-by约定的密钥环目录。
💡 说明:下载的是 Redis 官方用于签名 APT 软件包的 GPG 公钥,为后续验证软件包来源提供保障。
3.4 添加 Redis 官方软件源
将 Redis 官方仓库地址写入 apt 源列表,并指定使用刚导入的 GPG 密钥进行签名验证。
执行命令:
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb jammy main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
执行结果:
Get:1 https://packages.redis.io/deb jammy InRelease [4,158 B]
Get:2 https://packages.redis.io/deb jammy/main amd64 Packages [1,140 B]
Fetched 5.3 kB in 1s (1.8 kB/s)
Reading package lists... Done
💡 命令解释:
deb定义二进制包源;signed-by=...指定验签密钥环;jammy是 Ubuntu 22.04 的代号;main是仓库组件。执行后再次apt-get update让新源生效。
💡 说明:成功从 Redis 官方仓库拉取索引,且无 GPG 报错即签名验证通过。现在可以通过
apt-cache policy redis-server查看可用版本。
3.5 确认可用版本
执行命令:
apt-cache policy redis-server
执行结果:
redis-server:
Installed: (none)
Candidate: 6:8.10.2-1rl1~jammy1
Version table:
6:8.10.2-1rl1~jammy1 500
500 https://packages.redis.io/deb jammy/main amd64 Packages
💡 说明:
Candidate: 6:8.10.2-1rl1~jammy1是当前最新稳定版本,验证官方仓库已正确生效(6:是 Debian 包的上游版本优先级前缀,实际版本为 8.10.2)。
3.6 安装 Redis
安装 redis 元包(包含服务端与命令行客户端)。
执行命令:
sudo apt-get install -y redis
执行结果:
Selecting previously unselected package redis-tools.
Preparing to unpack .../redis-tools_6%3a8.10.2-1rl1~jammy1_amd64.deb ...
Unpacking redis-tools (6:8.10.2-1rl1~jammy1) ...
Selecting previously unselected package redis-server.
Preparing to unpack .../redis-server_6%3a8.10.2-1rl1~jammy1_amd64.deb ...
Unpacking redis-server (6:8.10.2-1rl1~jammy1) ...
Selecting previously unselected package redis.
Unpacking redis (6:8.10.2-1rl1~jammy1) ...
Setting up redis-tools (6:8.10.2-1rl1~jammy1) ...
Setting up redis-server (6:8.10.2-1rl1~jammy1) ...
Setting up redis (6:8.10.2-1rl1~jammy1) ...
💡 命令解释:
redis是元包,会安装redis-server(服务端)、redis-cli(命令行客户端,随 redis-tools 提供)与redis-tools(redis-benchmark 等工具);-y自动确认。
💡 说明:安装过程自动完成服务配置。标准 systemd 系统会注册
redis-server.service并开机自启;若系统无 systemd(如精简部署)则不注册服务,需手动启动(见 3.7)。
3.7 启动 Redis 服务
标准 systemd 环境直接启用并启动服务:
执行命令:
sudo systemctl start redis-server
sudo systemctl status redis-server
执行结果:
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; preset: enabled)
Active: active (running) since ...
Main PID: 12345 (redis-server)
💡 命令解释:
systemctl start redis-server启动 Redis 守护进程;systemctl status redis-server查看运行状态。
无 systemd 环境手动启动:
sudo redis-server /etc/redis/redis.conf --daemonize yes
执行结果:
(无输出,执行成功)
💡 命令解释:
redis-server /etc/redis/redis.conf指定配置文件;--daemonize yes后台守护方式运行(配置文件默认daemonize no,需命令行覆盖)。
3.8 验证安装与版本
执行命令:
redis-cli ping
redis-cli --version
redis-server --version
执行结果:
PONG
redis-cli 8.10.2
Redis server v=8.10.2 sha=00000000:1 malloc=jemalloc-5.3.0 bits=64 build=accb23a4692c1fdb
💡 命令解释:
redis-cli ping发送心跳探测(返回PONG表示服务正常);redis-cli --version查看客户端版本;redis-server --version查看服务端版本与内存分配器信息。
💡 说明:成功返回 PONG 与 v=8.10.2,证明 Redis 安装、启动全部正确。
malloc=jemalloc是 Redis 官方推荐的堆内存分配器(内存碎片管理更好)。
3.9 验证数据读写
执行命令:
redis-cli set hello world
redis-cli get hello
redis-cli dbsize
执行结果:
OK
"world"
(integer) 1
💡 命令解释:
set写入键值对;get读取;dbsize返回当前库的键数量。
💡 说明:写入与读取正常,
dbsize为 1 表示当前库有 1 个键。默认有 16 个逻辑库(databases 16),redis-cli -n 3可切换库。
四、deb 离线包安装方案(断网)
在生产环境、内网机或安全要求较高的服务器上,可能无法访问 Redis 官方仓库或外网。此时可通过「一台临时联网机器下载 .deb 离线包 → 拷贝到断网服务器 → 本地 dpkg/apt 安装」的方式完成 Redis 8 安装。以下步骤均以 root 用户在真实 Ubuntu 22.04 服务器上实测验证。
4.1 离线安装前置条件
- 一台临时可联网的 Ubuntu 22.04 机器(架构 x86_64),用于提前下载 .deb 离线包
- 目标断网服务器:Ubuntu 22.04,x86_64,root 权限
- 系统已具备基础运行库:
adduser、libc6、libssl3(Ubuntu 22.04 默认已具备)
4.2 离线包清单与版本
下表为 Redis 8.10.2 离线安装所需的全部 .deb 包(实测于 packages.redis.io 官方仓库,版本 6:8.10.2-1rl1~jammy1):
| .deb 包 | 版本 | 作用 |
|---|---|---|
| redis-server_6:8.10.2-1rl1~jammy1_amd64.deb | 8.10.2 | 服务端(含 redis-server 守护进程) |
| redis-tools_6:8.10.2-1rl1~jammy1_amd64.deb | 8.10.2 | 客户端工具(redis-cli、redis-benchmark 等) |
| redis_6:8.10.2-1rl1~jammy1_all.deb | 8.10.2 | 元包,依赖并拉取 redis-server |
💡 依赖说明:
redis-server依赖同版本redis-tools;redis元包依赖同在6:8.10.2-1rl1~jammy1范围的redis-server。三者的运行依赖(adduser、libc6、libssl3)在 Ubuntu 22.04 均预装,断网安装时无额外缺失依赖。
4.3 在联网机器下载离线包
在临时联网机器上,先按上文「在线安装」添加 Redis 官方仓库,再使用 apt-get download 拉取指定版本 .deb。apt source 中 deb 文件名含 %3a(冒号的 URL 编码),属于正常现象。
mkdir -p /opt/redis-offline
cd /opt/redis-offline
apt-get download redis-server
apt-get download redis-tools
apt-get download redis
执行结果:
Get:1 https://packages.redis.io/deb jammy/main amd64 redis-server amd64 6:8.10.2-1rl1~jammy1 [8220 kB]
Get:2 https://packages.redis.io/deb jammy/main amd64 redis-tools amd64 6:8.10.2-1rl1~jammy1 [588 kB]
Get:3 https://packages.redis.io/deb jammy/main amd64 redis all 6:8.10.2-1rl1~jammy1 [33.2 kB]
Fetched 8842 kB in 4s (2152 kB/s)
下载完成后,/opt/redis-offline 目录下应有 3 个 .deb 文件:
ls -lh /opt/redis-offline
执行结果:
-rw-r--r-- 1 root root 8.2M redis-server_6%3a8.10.2-1rl1~jammy1_amd64.deb
-rw-r--r-- 1 root root 588K redis-tools_6%3a8.10.2-1rl1~jammy1_amd64.deb
-rw-r--r-- 1 root root 33K redis_6%3a8.10.2-1rl1~jammy1_all.deb
将整个目录通过 U 盘 / 内网传输 / scp 等方式拷贝到断网目标服务器,例如放到 /opt/redis-offline。
💡 命令解释:
apt-get download仅下载指定包的 .deb,不进行安装,且会自动解析版本;多包下载建议逐包执行,便于核对包名与版本。若需固定特定小版本,可用apt-get download redis-server=6:8.10.2-1rl1~jammy1的形式。
4.4 模拟断网,仅用本地 .deb 安装
在断网目标服务器上,将下载好的 .deb 放入同一目录,然后使用 apt-get install --no-download 从本地文件安装,全程不需要网络。
cd /opt/redis-offline
apt-get install -y --no-download ./redis-tools_6%3a8.10.2-1rl1~jammy1_amd64.deb \
./redis-server_6%3a8.10.2-1rl1~jammy1_amd64.deb \
./redis_6%3a8.10.2-1rl1~jammy1_all.deb
执行结果:
Selecting previously unselected package redis-tools.
Preparing to unpack .../redis-tools_6%3a8.10.2-1rl1~jammy1_amd64.deb ...
Unpacking redis-tools (6:8.10.2-1rl1~jammy1) ...
Selecting previously unselected package redis-server.
Preparing to unpack .../redis-server_6%3a8.10.2-1rl1~jammy1_amd64.deb ...
Unpacking redis-server (6:8.10.2-1rl1~jammy1) ...
Selecting previously unselected package redis.
Preparing to unpack .../redis_6%3a8.10.2-1rl1~jammy1_all.deb ...
Unpacking redis (6:8.10.2-1rl1~jammy1) ...
Setting up redis-tools (6:8.10.2-1rl1~jammy1) ...
Setting up redis-server (6:8.10.2-1rl1~jammy1) ...
Created symlink /etc/systemd/system/redis.service → /lib/systemd/system/redis-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/redis-server.service → /lib/systemd/system/redis-server.service.
/usr/sbin/policy-rc.d returned 101, not running 'start redis-server.service'
Setting up redis (6:8.10.2-1rl1~jammy1) ...
💡 命令解释:
--no-download禁止 apt 尝试从网络抓取任何包,只用命令行中指定的 .deb 完成安装,是断网安装的核心开关。三个包按「依赖先于被依赖方」顺序列出(redis-tools → redis-server → redis),确保 apt 校验通过。💡 说明:
policy-rc.d returned 101, not running 'start redis-server.service'表示安装后未立即启动服务(由策略脚本抑制),属正常现象,需通过systemctl显式启动。同时 hint 显示离线安装也自动生成了 systemd 启用的符号链接。
备用方式:dpkg -i + apt-get install -f 补齐依赖
若采用 dpkg -i 逐一安装,当出现未满足的依赖时,用 apt-get install -f 自动补齐:
dpkg -i /opt/redis-offline/redis-tools_6%3a8.10.2-1rl1~jammy1_amd64.deb
dpkg -i /opt/redis-offline/redis-server_6%3a8.10.2-1rl1~jammy1_amd64.deb
dpkg -i /opt/redis-offline/redis_6%3a8.10.2-1rl1~jammy1_all.deb
apt-get install -f -y
⚠️ 注意:
dpkg -i不解决依赖,若系统缺少如 libssl3 等运行库(精简系统可能缺失),dpkg -i会报依赖错误,此时需要apt-get install -f -y补装;而apt-get install --no-download已自动排序依赖,是本方案推荐首选。
4.5 离线安装后启动服务并验证
离线安装的 Redis 同样需要 systemd 托管启动:
systemctl enable --now redis-server
systemctl is-enabled redis-server
redis-cli ping
redis-server --version
执行结果:
enabled
PONG
Redis server v=8.10.2 sha=00000000:1 malloc=jemalloc-5.3.0 bits=64 build=accb23a4692c1fdb
💡 说明:离线安装得到的 Redis 与在线安装完全一致(同版本 8.10.2),数据目录同为
/var/lib/redis,配置同为/etc/redis/redis.conf,可实现与在线方案相等的功能与安全配置。
4.6 离线安装与在线安装的差异对照
| 对比项 | 在线安装 | 离线安装(断网) |
|---|---|---|
| 软件来源 | Redis 官方仓库 packages.redis.io/deb | 本地 .deb 离线包 |
| 是否需外网 | 需要 | 不需要 |
| 安装命令 | apt-get install -y redis | apt-get install --no-download ./redis*.deb(或 dpkg -i) |
| 安装前准备 | 导入 GPG + 添加源 + apt-get update | 联网机提前下载 .deb 并拷贝 |
| 依赖处理 | apt 自动拉取 | --no-download 自动排序,或 apt-get install -f 补齐 |
| 版本一致性 | 官方仓库当前候选版 | 下载时固定版本等同 |
| systemd 托管 | 自动注册服务并自启 | 同样自动注册服务并自启 |
| 配置/数据目录 | /etc/redis、/var/lib/redis | 完全相同 |
💡 选择建议:内网隔离或等保要求高的服务器优先使用离线安装;能从外网访问官方仓库时直接用在线安装更简单。两者最终产物完全等价。
五、官方 tar.gz 源码包离线安装方案
除 .deb 离线包外,Redis 还提供官方 tar.gz 源码包(redis-8.0.2.tar.gz,自 download.redis.io)。在完全断网的服务器上,可先在一台联网机器下载源码包并校验哈希,拷贝到目标机后通过 make 编译安装。好处是不依赖任何软件源与 GC 版本,可完全自定义安装前缀与配置,二进制与系统自带版本并存互不冲突。本章以官方 Redis 8.0.2 源码包在真实 Ubuntu 22.04.5 服务器(x86_64、root)上实测,监听 6381 端口、服务名 redis-targz。
⚠️ 前置观察:本机已存在系统 Redis 8.10.2(在线安装),其 systemd 服务
redis-server.service占用 6379 端口。为避免端口冲突,源码包版改用 6381 端口、独立配置与独立目录,形成「双实例并存」的隔离部署。
5.1 下载官方源码包并校验
创建独立目录,用 wget 从官方下载:
mkdir -p /opt/redis-targz
cd /opt/redis-targz
wget -O redis-8.0.2.tar.gz https://download.redis.io/releases/redis-8.0.2.tar.gz
执行结果:
3600K ......... ..... .......... .......... ......... 99% 15.1M 0s
3700K ......... ..... .......... .......... ......... 100% 14.4M=1.7s
2026-09-30 16:11:56 (2.13 MB/s) - 'redis-8.0.2.tar.gz' saved [3815180/3815180]
-rw-r--r-- 1 root root 3.7M May 27 2025 redis-8.0.2.tar.gz
校验 SHA-256 完整性(与 Redis 官方 releases 页公布的哈希比对):
sha256sum /opt/redis-targz/redis-8.0.2.tar.gz
执行结果:
e9296b67b54c91befbcca046d67071c780a1f7c9f9e1ae5ed94773c3bb9b542f redis-8.0.2.tar.gz
💡 校验通过再进入下一步,可防止下载损坏或缺包导致编译失败。
5.2 安装编译依赖
源码编译需要 build-essential(gcc/gmake)与 tcl(make test 需要)。若系统已有则输出 is already the newest version:
apt-get update
apt-get install -y build-essential tcl wget
执行结果(摘要):
build-essential is already the newest version (12.9ubuntu3).
tcl is already the newest version (8.6.11+1build2).
wget is already the newest version (1.21.2-2ubuntu1.5).
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
💡 说明:官方源码编译依赖本就极少,
build-essential提供gcc 11.4.0与make,wget用于上一步下载。这也是源码包方案在断网/精简系统上可行的原因——编译依赖可在联网机提前装好。
5.3 解压并编译
cd /opt/redis-targz
tar xzf redis-8.0.2.tar.gz
cd redis-8.0.2
make -j$(nproc)
执行结果(编译尾部):
LINK redis-server
LINK redis-benchmark
LINK redis-cli
INSTALL redis-sentinel
INSTALL redis-check-rdb
INSTALL redis-check-aof
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory '/opt/redis-targz/redis-8.0.2/src'
💡 命令解释:
make -j$(nproc)并发编译(实测 6 核),$(nproc)自动取 CPU 核数。末尾Hint: It's a good idea to run 'make test'表示编译成功并可运行测试套件(依赖 5.2 的tcl)。
安装到独立前缀 /usr/local/redis:
make install PREFIX=/usr/local/redis
执行结果:
INSTALL redis-server
INSTALL redis-benchmark
INSTALL redis-cli
make[1]: Leaving directory '/opt/redis-targz/redis-8.0.2/src'
执行结果(已安装二进制):
-rwxr-xr-x 1 root root 6645464 Sep 30 16:12 redis-benchmark
lrwxrwxrwx 1 root root 12 Sep 30 16:12 redis-check-aof -> redis-server
lrwxrwxrwx 1 root root 12 Sep 30 16:12 redis-check-rdb -> redis-server
-rwxr-xr-x 1 root root 7646544 Sep 30 16:12 redis-cli
lrwxrwxrwx 1 root root 12 Sep 30 16:12 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 18082464 Sep 30 16:12 redis-server
💡 说明:
PREFIX=/usr/local/redis把可执行文件装到/usr/local/redis/bin/独立目录,与系统/usr/bin/下的 Redis 8.10.2 完全隔离(两套redis-server/redis-cli并存)。redis-sentinel、redis-check-*为符号链接指向redis-server。
5.4 创建独立用户与目录
使用系统已有 redis 系统账号(uid/gid 已在在线安装时创建)。若系统无此账号,先执行 useradd -r -s /usr/sbin/nologin redis 再 chown:
mkdir -p /var/lib/redis-targz /var/log/redis-targz
chown -R redis:redis /var/lib/redis-targz /var/log/redis-targz
执行结果:
drwxr-xr-x 2 redis redis 4096 Sep 30 16:13 /var/lib/redis-targz
drwxr-xr-x 2 redis redis 4096 Sep 30 16:13 /var/log/redis-targz
5.5 编写独立配置文件
用 heredoc 一次性写入 /etc/redis-targz.conf(逐项列出,端口 6381、独立目录):
cat > /etc/redis-targz.conf <<'EOF'
bind 127.0.0.1
protected-mode yes
port 6381
daemonize no
supervised no
dir /var/lib/redis-targz
logfile /var/log/redis-targz/redis-targz.log
loglevel notice
requirepass Targz@2026
save 3600 1 300 100 60 10000
appendonly no
EOF
关键参数说明:
| 参数 | 值 | 说明 |
|---|---|---|
bind | 127.0.0.1 | 仅监听本机回环,外网不可达 |
protected-mode | yes | 保护模式开关 |
port | 6381 | 避开系统版 6379 的独立端口 |
daemonize | no | 前台运行,交由 systemd 托管 |
supervised | no | 关闭自动监督(由 systemd 管理) |
dir | /var/lib/redis-targz | 独立 RDB/AOF 数据目录 |
logfile | /var/log/redis-targz/redis-targz.log | 独立日志路径 |
requirepass | Targz@2026 | 认证密码 |
save | 3600 1 300 100 60 10000 | RDB 快照默认策略 |
appendonly | no | 仅 RDB 持久化 |
⚠️ 挖坑点:
logfile一定要落在redis用户可写的目录内(如/var/log/redis-targz/)。若直接写成/var/log/redis-targz.log(紧贴根目录),该路径由 root 拥有,redis用户无法创建/写入日志文件,systemd 服务会以exit-code(status=1)不断失败。见下方「一坑一解」。
5.6 编写 systemd 单元
cat > /lib/systemd/system/redis-targz.service <<'EOF'
[Unit]
Description=Redis 8 (official tar.gz build) on port 6381
After=network.target
[Service]
Type=simple
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /etc/redis-targz.conf
RuntimeDirectory=redis-targz
WorkingDirectory=/var/lib/redis-targz
LimitNOFILE=10240
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
Type | simple | 前台常驻进程(配合 daemonize no) |
User/Group | redis | 以最小权限账号运行 |
ExecStart | /usr/local/redis/bin/redis-server /etc/redis-targz.conf | 指向源码包二进制与独立配置 |
RuntimeDirectory | redis-targz | 自动创建 /run/redis-targz 运行时目录 |
WorkingDirectory | /var/lib/redis-targz | 数据工作目录 |
LimitNOFILE | 10240 | 提高文件描述符上限 |
Restart | on-failure | 异常退出自动重启 |
WantedBy | multi-user.target | 开机自启 |
5.7 重新加载并启动
systemctl daemon-reload
systemctl enable --now redis-targz
systemctl is-enabled redis-targz
执行结果:
Created symlink /etc/systemd/system/multi-user.target.wants/redis-targz.service → /lib/systemd/system/redis-targz.service.
enabled
查看运行状态:
systemctl status redis-targz --no-pager
执行结果:
● redis-targz.service - Redis 8 (official tar.gz build) on port 6381
Loaded: loaded (/lib/systemd/system/redis-targz.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-09-30 16:17:17 UTC; 2s ago
Main PID: 11508 (redis-server)
Tasks: 6 (limit: 5753)
Memory: 2.1M
💡 说明:
Active: active (running)且显示Main PID,is-enabled返回enabled,表明服务已由 systemd 托管并开机自启。此时系统版(6379)与源码版(6381)双实例并存互不影响。
5.8 验证
分别用无密码与带密码方式连通性验证(源码包自带 redis-cli):
/usr/local/redis/bin/redis-cli -p 6381 ping
/usr/local/redis/bin/redis-cli -p 6381 -a 'Targz@2026' --no-auth-warning ping
/usr/local/redis/bin/redis-cli -p 6381 -a 'Targz@2026' --no-auth-warning info server
执行结果:
NOAUTH Authentication required.
PONG
redis_version:8.0.2
redis_mode:standalone
run_id:db7aed8c1d52966bbeef062a0bef7d41d62d4d55
tcp_port:6381
读写验证:
/usr/local/redis/bin/redis-cli -p 6381 -a 'Targz@2026' --no-auth-warning set hello world
/usr/local/redis/bin/redis-cli -p 6381 -a 'Targz@2026' --no-auth-warning get hello
/usr/local/redis/bin/redis-cli -p 6381 -a 'Targz@2026' --no-auth-warning del hello
执行结果:
OK
world
1
💡 说明:未认证得到
NOAUTH Authentication required.,认证后PONG;redis_version:8.0.2、tcp_port:6381印证源码包 8.0.2 在独立端口运行正常。至此「官方 tar.gz 源码包离线安装」完成。
5.9 源码包安装与其它方案的差异对照
| 对比项 | 在线安装(apt) | .deb 离线包 | 官方 tar.gz 源码包 |
|---|---|---|---|
| 软件来源 | Redis 官方仓库 packages.redis.io/deb | 预下载本地 .deb | download.redis.io 官方源码 tarball |
| 网络要求 | 需要联网 | 断网可用(需联网机预下载) | 断网可用(需联网机预下载) |
| 安装方式 | apt-get install -y redis | apt-get install --no-download ./redis*.deb | tar xzf + make/make install |
| 版本 | 仓库候选版(8.10.2) | 下载时固定版本(8.10.2) | 源码版(本例 8.0.2) |
| 编译依赖 | 无(预编译二进制) | 无(预编译二进制) | build-essential、tcl |
| 可定制性 | 低(随发行版布局) | 低 | 高(自定义 PREFIX、编译参数) |
| 安装前缀 | /usr/bin、/etc/redis | 同在线安装 | 独立 /usr/local/redis/bin |
| 与系统版冲突 | 无(唯一实例) | 无冲突(走系统 update-alternatives) | 与系统 Redis 完全隔离,可双实例并存 |
| systemd 服务 | 自动注册 redis-server.service | 同样自动注册 | 需手写独立 redis-targz.service |
💡 选择建议:需要「同一台机上多套 Redis 版本/参数并存」或深度定制编译选项时,选官方 tar.gz 源码包;只求内网断网快速上生产、又不想管编译的,用 .deb 离线包;能上网则在线安装最简单。三者产物功能等价。
5.10 一坑一解
坑 1:systemd 服务以 status=1 反复失败(exit-code)。
现象:systemctl status redis-targz 显示 Active: failed (Result: exit-code),journalctl 无具体报错。
原因:logfile 指向 redis 用户无写权限的路径(如 /var/log/redis-targz.log,紧贴 root 拥有的 /var/log),服务启动时无法打开日志文件而退出。
解决:把 logfile 改到 redis 用户拥有的目录,并确认目录归属:
chown -R redis:redis /var/lib/redis-targz /var/log/redis-targz
坑 2:bind: Address already in use。
现象:Redis is starting 后立即报 Warning: Could not create server TCP listening socket 127.0.0.1:6381: bind: Address already in use 并 Failed listening on port 6381 (tcp), aborting.。
原因:同机已有进程占用该端口(本机系统版 Redis 已占 6379;若手动作过多次前台启动,也可能残留占用 6381 的旧进程)。systemd 服务因端口被占而失败。
解决:先确认占用的进程,杀掉残留的旧实例后重启服务:
ps aux | grep [r]edis-server
systemctl start redis-targz
💡 二者皆为本章实测踩过的坑,修复后服务
Active: active (running)并enabled。开发排障时可先systemctl status、再cat独立日志文件redis-targz.log定位根因。
六、配置说明
6.1 配置文件结构(安装后实测)
Redis 安装后默认配置文件为 /etc/redis/redis.conf,是唯一的服务端配置文件(与 MySQL/PG 的 include 体系不同)。安装后去除注释的关键配置如下:
# 网络监听:默认仅本机 IPv4 + IPv6 回环
bind 127.0.0.1 -::1
# 服务端口
port 6379
# 保护模式:有 bind 时限制外部访问
protected-mode yes
# 后台运行(systemd 托管时必须为 no)
daemonize no
# 日志文件
logfile /var/log/redis/redis-server.log
# 日志级别
loglevel notice
# 数据目录(RDB/AOF 文件存放位置)
dir /var/lib/redis
# 是否开启 AOF 追加持久化
appendonly no
# 数据库数量
databases 16
# 最大连接数
maxclients 10000
# 空闲连接超时(0 表示不超时)
timeout 0
# TCP 保活
tcp-keepalive 300
# RDB 快照触发条件(默认)
save 3600 1 300 100 60 10000
# 内存淘汰策略(默认不淘汰,内存满时拒绝写入)
maxmemory-policy noeviction
💡 说明:Redis 8 默认不启用密码认证(
requirepass未设置),且默认只监听本机回环地址。生产环境必须设置密码并配置持久化。
6.2 设置访问密码(安全加固)
生产环境必须设置密码认证:
# 在 /etc/redis/redis.conf 中添加
requirepass 强密码
修改后重启生效:sudo systemctl restart redis-server。
验证:
redis-cli -a '强密码' ping
# 未带密码访问会被拒绝
redis-cli ping
# 输出:(error) NOAUTH Authentication required.
💡 说明:设置密码后所有客户端连接必须携带
-a 密码(或AUTH命令)。注意命令行-a明文传参有安全警告,生产建议通过环境变量或配置工具注入。
6.3 开启 AOF 持久化(数据不丢失)
默认仅开启 RDB 快照持久化(默认 save 策略),崩溃时可能丢失最近数据。生产建议同时开启 AOF:
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
💡 说明:
appendfsync everysec每秒刷盘一次,是性能与安全的折中;always每条命令都刷盘最安全但性能最差。开启后重启服务数据不丢失。
6.4 修改监听地址(远程访问)
默认只监听回环地址。如需远程访问(建议配合密码 + 防火墙):
bind 0.0.0.0
⚠️ 注意:监听
0.0.0.0前必须已设置requirepass,否则 Redis 将无认证暴露到公网。
6.5 设置内存上限与淘汰策略
# 内存上限(如 512MB)
maxmemory 512mb
# 达到上限后的淘汰策略
maxmemory-policy allkeys-lru
💡 说明:默认
noeviction(内存满时拒绝写入并报错);allkeys-lru按 LRU 淘汰任意键;volatile-lru只淘汰设置了过期时间的键。按业务选型。
6.6 注意事项
- 精简/无 systemd 环境中安装后无 systemd 服务,需手动
redis-server /etc/redis/redis.conf --daemonize yes启动;标准系统会自动注册redis-server.service并开机自启 - Redis 8 默认不启用密码认证且只监听回环地址,首次部署后务必设置
requirepass并配置持久化 - 远程访问需修改
bind 0.0.0.0,且必须先设置密码 + 放行防火墙端口 6379 - 默认仅开启 RDB 快照(save 策略),崩溃可能丢数据;生产建议开启
appendonly yes maxmemory-policy默认noeviction,内存满时写入会报OOM command not allowed when used memory > 'maxmemory',需按业务设置淘汰策略- 配置文件是唯一的服务端配置来源(无 include 机制),修改后必须重启生效
七、常见问题(FAQ)
7.1:apt update 报 NO_PUBKEY / 签名验证失败
原因: 未导入官方 GPG 密钥或密钥环路径与源列表不一致。
解决:
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
# 确认源列表中 signed-by 路径与此一致
7.2:redis-cli 报 (error) NOAUTH Authentication required.
原因: 已设置 requirepass 但连接未携带密码。
解决:
redis-cli -a '密码' ping
7.3:内存写入报 OOM command not allowed when used memory > 'maxmemory'
原因: 达到内存上限且策略为 noeviction(拒绝写入)。
解决: 设置淘汰策略:
maxmemory 512mb
maxmemory-policy allkeys-lru
7.4:远程连接被拒绝(connection refused)
原因: 默认只监听回环地址。
解决: 修改 bind 0.0.0.0 并重启,同时确认防火墙/安全组放行 6379 端口。
八、卸载与清理
如需卸载,执行以下命令:
sudo systemctl stop redis-server
sudo apt-get remove --purge -y redis redis-server redis-tools
sudo apt-get autoremove -y
sudo rm -rf /var/lib/redis /var/log/redis /etc/redis
九、参考链接
本文档由 www.quzuo.net 平台开发