Redis 是那种「装起来只要十秒,装错了十天后来收拾」的东西。默认配置下的 Redis 只监听本机、无密码、无持久化上限——本地开发没问题,放到有公网 IP 的服务器上,开放的 6379 端口是自动化扫描脚本最爱啃的目标。这篇把装法和必须改的五个配置一起讲完。
下面命令在 Ubuntu 22.04 与 24.04 上通用。
一、两种装法怎么选
apt policy redis-server # 先看源里是哪个版本
Ubuntu 官方源里通常是 Redis 6.0.x,胜在稳定、跟系统一起升级;想要 7.x 的新特性(Functions、多部分 AOF、更好的过期处理)就走官方源。
装法 A:系统源(推荐新手)
sudo apt update
sudo apt install -y redis-server
sudo systemctl enable --now redis-server
装法 B:Redis 官方源(要新版)
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/redis.list
sudo apt update
sudo apt install -y redis
装完确认:
redis-server --version
redis-cli ping # 返回 PONG 就成了
注意 Ubuntu 上包名叫 redis-server、服务名也是 redis-server;用官方源时包名是 redis。配置文件统一在 /etc/redis/redis.conf。
二、装完必须改的 5 个配置
打开 /etc/redis/redis.conf,按下面这张表逐项核对:
| 配置项 | 默认值 | 建议值 | 不改会怎样 |
|---|---|---|---|
bind |
127.0.0.1 -::1 |
需要远程才改 0.0.0.0 |
外部连不上(这是好事,别急着改) |
protected-mode |
yes |
保持 yes |
改成 no 又没密码=裸奔 |
requirepass |
未设置 | 设一个长随机密码 | 任何人可读写、可 FLUSHALL |
supervised |
no |
systemd |
systemd 管理时告警、重启策略不干净 |
appendonly |
no |
yes(需要持久化) |
重启后数据全丢 |
还有一个不是默认项但强烈建议加上的:内存上限。Redis 不设 maxmemory 就会一直吃内存,直到被内核 OOM killer 干掉,连带可能拖垮同机其他服务。
maxmemory 1gb
maxmemory-policy allkeys-lru
allkeys-lru 表示内存满时淘汰最近最少用的键;如果 Redis 是当缓存用,这是最合适的策略。如果当存储用(开了持久化、不能丢键),应该用 noeviction,然后靠监控在内存吃紧前扩容。
改完重启并验证:
sudo systemctl restart redis-server
redis-cli ping # 无密码时可通(因为还没设密码或本机)
redis-cli -a '你的密码' ping # 有密码后这样连
redis-cli -a '你的密码' info server # 看版本、运行时间、配置文件路径
👉 密码别自己想:随机密码生成器(在线免登录)
三、要不要远程访问
能不开就不开。 如果应用和 Redis 在同一台机器,保持 bind 127.0.0.1 是最安全的配置,什么都别动。
确实要远程(比如应用服务器单独部署),四件事一起做,缺一个都不安全:
bind 0.0.0.0
protected-mode no # 只有同时设了 requirepass 才安全
requirepass 你的超长随机密码
然后防火墙只允许应用服务器那个 IP:
sudo ufw allow from 10.0.0.7 to any port 6379 proto tcp
sudo ufw reload
云服务器还要在控制台安全组里放行。千万不要图省事 ufw allow 6379 对全网开放——公网无密码 Redis 被入侵的典型剧本是:写入 SSH 公钥 → 下载挖矿程序 → FLUSHALL 清空你的数据,整个过程不需要一分钟。
四、持久化:至少要懂这两句
- RDB(快照):默认开着,按
save 3600 1 300 100 60 10000这种规则在后台 fork 出快照存到dump.rdb。恢复快,但宕机会丢最后一次快照之后的数据。 - AOF(追加日志):
appendonly yes打开,把每条写命令追加到日志。丢数据最多一秒(appendfsync everysec),文件更大、恢复更慢。
两个都开是最常见的生产配置:AOF 保证少丢数据,RDB 留一份紧凑快照方便备份迁移。开了 AOF 之后记得确认磁盘够用,并检查 dir 指向的目录(默认 /var/lib/redis)redis 用户有写权限。
验证持久化是否真的在工作:
redis-cli -a '密码' config get save
redis-cli -a '密码' info persistence # 看 rdb_last_bgsave_status / aof_enabled
ls -lh /var/lib/redis/
五、四个常见报错
| 现象 / 告警 | 原因 | 处理 |
|---|---|---|
启动日志出现 WARNING overcommit_memory is set to 0 |
内核内存分配策略不利于 fork 快照 | sudo sysctl vm.overcommit_memory=1,并写进 /etc/sysctl.conf |
WARNING: Transparent Huge Pages (THP) support enabled |
THP 会让 Redis 延迟抖动、内存占用虚高 | echo never > /sys/kernel/mm/transparent_hugepage/enabled,最好写成 systemd 服务开机执行 |
MISCONF Redis is configured to save RDB snapshots... |
上次 bgsave 失败,Redis 拒绝写入 | 查磁盘空间和 /var/lib/redis 权限;临时恢复可用 config set stop-writes-on-bgsave-error no |
NOAUTH Authentication required |
设了密码但客户端没认证 | redis-cli -a 密码 或连接后 AUTH 密码 |
| 明明改了配置却不生效 | 启动时用了别的配置文件 | redis-cli info server 里的 config_file 看实际加载路径 |
六、卸载
sudo systemctl stop redis-server
sudo apt purge -y redis-server # 官方源装的写 redis
sudo rm -rf /etc/redis /var/lib/redis
sudo apt autoremove -y
小结
Ubuntu 上装 Redis 只要一条 apt install,真正要花时间的是装完之后:设密码、限制监听、设内存上限、按用途开持久化。安全那部分没有「以后再补」——6379 暴露在公网的机器,通常撑不过一天就会被扫到。
装完顺手确认一件事:ss -lntp | grep 6379,看看它监听的到底是 127.0.0.1:6379 还是 0.0.0.0:6379。这个结果决定了你的 Redis 是安全的还是正在裸奔。
👉 排查时常用的在线工具:Linux 命令速查 · 端口连通性检测 · SSH 连通性检测