Ubuntu 安装 Redis:apt 装完必须改的 5 个配置

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 连通性检测

还有 65 个免费在线工具

纯前端实现,不用注册,数据不上传服务器。

浏览全部工具