如何在 Linux 上安装和配置 Redis:完整分步指南
Redis 是一个功能强大的开源内存数据结构存储,广泛用作数据库、缓存和消息代理。Redis 因其卓越的性能和多功能性而闻名,是希望通过缓存频繁请求的数据、管理会话和处理实时分析来大幅加快应用程序速度的开发人员的首选解决方案。无论您是在 VPS 主机 计划上运行高流量 Web 应用程序,还是管理专用基础设施,本综合指南都会引导您完成在 Linux 系统上安装、配置和保护 Redis 的每一步。
什么是 Redis,为什么应该使用它?
在深入安装过程之前,值得了解是什么使 Redis 如此受欢迎:
- 内存存储:Redis 将数据存储在 RAM 中,使读写操作极其快速 — 通常在一毫秒以内完成。
- 多功能数据结构:支持字符串、哈希、列表、集合、有序集合、位图等。
- 持久化选项:尽管是内存数据库,Redis 可以将数据持久化到磁盘以在重启后存活。
- 发布/订阅消息传递:Redis 支持发布/订阅消息传递模式,用于服务之间的实时通信。
- 广泛的语言支持:Python、PHP、Node.js、Java、Ruby、Go 等都有官方客户端库。
Redis 在应用程序性能至关重要的环境中特别有价值 — 例如,当您的后端托管在 专用服务器 上并每天处理数百万个请求时。
前置条件
在开始之前,请确保您拥有:
- 运行 Ubuntu/Debian 或 CentOS/RHEL 的 Linux 服务器
- 服务器的 root 或 sudo 访问权限
- 对 Linux 命令行的基本了解
- 用于下载软件包的活跃互联网连接
第 1 步:更新您的系统
始终从更新系统的软件包索引和将已安装的软件包升级到最新版本开始。这确保了兼容性和安全性:
sudo apt update && sudo apt upgrade -y对于 CentOS/RHEL 系统:
sudo yum update -y保持服务器最新是一项基本的安全实践,特别是在生产环境中。
第 2 步:安装 Redis
大多数主要 Linux 发行版在其官方软件包存储库中包含 Redis,使安装变得简单直接。
在 Ubuntu / Debian 上
sudo apt install redis-server -y在 CentOS / RHEL 上
CentOS/RHEL 系统需要首先启用 EPEL(企业 Linux 额外软件包) 存储库:
sudo yum install epel-release -y
sudo yum install redis -y> 注意: 在较新版本的 CentOS/RHEL(8+)上,您可以使用 dnf 而不是 yum:
> “`bash
> sudo dnf install redis -y
> “`
第 3 步:验证安装
安装完成后,通过检查其版本来确认 Redis 已正确安装:
redis-server --version预期输出(示例):
Redis server v=7.0.12 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 build=...如果您看到版本号,则 Redis 已成功安装在您的系统上。
第 4 步:启动并启用 Redis 服务
安装后,您需要启动 Redis 服务并将其配置为在系统启动时自动启动。
在 Ubuntu / Debian 上
sudo systemctl start redis
sudo systemctl enable redis在 CentOS / RHEL 上
sudo systemctl start redis
sudo systemctl enable redis验证 Redis 正在运行
sudo systemctl status redis预期输出:
● redis.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis.service; enabled)
Active: active (running) since ...绿色的 active (running) 状态确认 Redis 正在正确运行。
第 5 步:配置 Redis
Redis 的行为由其主配置文件控制:
- Ubuntu/Debian:
/etc/redis/redis.conf - CentOS/RHEL:
/etc/redis.conf
使用文本编辑器打开配置文件:
sudo nano /etc/redis/redis.conf以下是您应该查看和调整的最重要的配置选项。
5.1 设置密码(身份验证)
默认情况下,Redis 不需要身份验证。对于任何生产环境,设置强密码至关重要:
找到包含 # requirepass 的行并更新它:
requirepass your_strong_password_here选择一个长的、随机生成的密码。Redis 速度极快,这意味着暴力破解攻击可以在没有速率限制的情况下每秒尝试数十万次猜测。
5.2 绑定 IP 地址
默认情况下,Redis 仅绑定到 127.0.0.1(本地主机),这可防止外部访问。这是最安全的默认设置。
如果您的应用程序需要从另一台服务器连接到 Redis,您可以绑定到其他 IP 地址:
bind 127.0.0.1 192.168.1.100> 安全警告: 在公开面向的服务器上,切勿在没有适当防火墙规则的情况下将 Redis 绑定到 0.0.0.0(所有接口)。暴露的 Redis 实例是常见的攻击向量。
5.3 更改默认端口
Redis 默认监听端口 6379。更改此端口增加了一层隐蔽性:
port 6380如果您更改端口,请记住更新防火墙规则和应用程序连接字符串。
5.4 应用配置更改
编辑 redis.conf 后,重启 Redis 服务以应用所有更改:
sudo systemctl restart redis第 6 步:测试 Redis 安装
使用内置的 Redis CLI(命令行界面)来验证 Redis 是否正常工作:
redis-cli如果您设置了密码,请先进行身份验证:
AUTH your_strong_password_here运行 Ping 测试
ping预期响应:
PONG设置和检索键值对
SET mykey "Hello, Redis!"
GET mykey预期响应:
"Hello, Redis!"如果 Redis 正确返回存储的值,您的安装已完全正常运行,数据库正在按预期存储和检索数据。
退出 CLI
exit第 7 步:将 Redis 配置为后台守护程序(可选)
如果您希望 Redis 作为后台守护程序进程运行(而不是前台进程),请在 daemonize 中配置 redis.conf 选项:
daemonize yes保存文件后,重启 Redis:
sudo systemctl restart redis验证服务在后台运行:
sudo systemctl status redis您还可以使用以下命令确认 Redis 进程处于活跃状态:
ps aux | grep redis第 8 步:启用 Redis 持久化(可选但推荐)
默认情况下,Redis 仅将数据存储在内存中,这意味着如果服务器重启,数据将丢失。Redis 提供两种持久化机制来解决这个问题:
选项 1:RDB(Redis 数据库备份)— 快照
RDB 在指定的间隔创建数据集的时间点快照。在 redis.conf 中配置它:
# Save a snapshot if at least 1 key changed in 900 seconds (15 minutes)
save 900 1
# Save a snapshot if at least 10 keys changed in 300 seconds (5 minutes)
save 300 10
# Save a snapshot if at least 10,000 keys changed in 60 seconds
save 60 10000RDB 对备份和灾难恢复很有效,但可能会丢失快照之间写入的数据。
选项 2:AOF(仅追加文件)— 写入日志
AOF 将每个写操作记录到一个文件中,提供更强的耐久性保证:
appendonly yes您还可以配置 AOF 同步策略:
# Options: always, everysec, no
appendfsync everysecalways— 最安全,但最慢(每次写入后同步)everysec— 性能和安全性的良好平衡(每秒同步)no— 最快,但依赖于操作系统刷新计划
> 最佳实践: 对于生产环境,同时使用 RDB 和 AOF 以获得最大的数据耐久性。
第 9 步:保护 Redis — 最佳实践
安全对任何 Redis 部署都至关重要。遵循这些最佳实践来加强您的 Redis 实例:
1. 启用密码身份验证
如第 5.1 步所述,始终在 requirepass 中设置强 redis.conf 值。
2. 限制网络访问
- 除非明确需要远程访问,否则将 Redis 绑定到
127.0.0.1。 - 为服务器间 Redis 通信使用私有网络或 VPN。
3. 配置防火墙规则
仅允许来自受信任 IP 地址的 Redis 流量。在 Ubuntu 上使用 ufw:
sudo ufw allow from 192.168.1.0/24 to any port 6379
sudo ufw deny 6379在 CentOS/RHEL 上使用 firewalld:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="6379" accept'
sudo firewall-cmd --reload4. 重命名或禁用危险命令
Redis 具有强大的管理命令(如 FLUSHALL、CONFIG、DEBUG),可能被利用。在 redis.conf 中重命名或禁用它们:
rename-command FLUSHALL ""
rename-command CONFIG "SECURE_CONFIG_XYZ123"
rename-command DEBUG ""5. 以非 root 用户身份运行 Redis
大多数发行版上的 Redis 软件包已创建专用的 redis 系统用户。确保 Redis 永远不会以 root 身份运行。
6. 保持 Redis 更新
定期更新 Redis 以修补已知漏洞:
sudo apt update && sudo apt upgrade redis-server -y第 10 步:将 Redis 与您的应用程序集成
安装并保护 Redis 后,您现在可以将其集成到应用程序堆栈中。以下是流行语言集成的快速概述:
Python — redis-py
pip install redisimport redis
r = redis.Redis(host='127.0.0.1', port=6379, password='your_password', decode_responses=True)
r.set('greeting', 'Hello from Python!')
print(r.get('greeting'))PHP — phpredis 扩展
sudo apt install php-redis -y<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('your_password');
$redis->set('greeting', 'Hello from PHP!');
echo $redis->get('greeting');
?>Node.js — ioredis
npm install ioredisconst Redis = require('ioredis');
const redis = new Redis({ host: '127.0.0.1', port: 6379, password: 'your_password' });
redis.set('greeting', 'Hello from Node.js!');
redis.get('greeting').then(value => console.log(value));Redis 与几乎每个现代 Web 框架和 CMS 无缝集成,包括 WordPress、Laravel、Django 和 Express.js — 使其成为任何开发人员工具栈中的宝贵工具。
常见 Redis 用例
了解 Redis 的优势所在有助于您充分利用部署:
| 用例 | 描述 |
|---|---|
| 会话存储 | 在 Redis 中存储用户会话,以便在多个应用服务器上快速、可扩展地访问 |
| 数据库缓存 | 缓存昂贵的 SQL 查询结果以减少数据库负载 |
| 速率限制 | 使用 Redis 计数器跟踪每个用户/IP 的 API 请求计数 |
| 实时排行榜 | 使用有序集合维护实时排名 |
| 消息队列 | 使用 Redis 列表或发布/订阅进行轻量级任务队列 |
| 全文搜索 | 使用 RediSearch 模块进行快速搜索索引 |
排查常见 Redis 问题
Redis 无法启动
检查日志中的错误:
sudo journalctl -u redis -n 50常见原因包括端口冲突、redis.conf 语法不正确或内存不足。
连接被拒绝错误
验证 Redis 正在监听预期的地址和端口:
ss -tlnp | grep redis身份验证错误
如果您收到 NOAUTH Authentication required,请确保您在客户端连接字符串中或通过 CLI 中的 AUTH 传递正确的密码。
内存使用率高
在 redis.conf 中配置内存
