Redis 是高性能的内存键值数据库,常用于网站缓存、会话存储、消息队列和排行榜等场景。在搬瓦工 VPS 上正确配置 Redis,既要让应用能顺利连接,又要做好访问控制,避免成为开放的网络风险点。本文涵盖安装、密码设置、绑定地址、持久化配置和连接测试全流程。

本文要点

  • 安装 Redis 并验证服务正常运行
  • 设置 requirepass 访问密码,防止未授权连接
  • bind 配置:只监听本地还是开放远程
  • RDB 与 AOF 两种持久化方案的选择
  • 用 redis-cli 测试连接与基本操作

安装 Redis

Debian / Ubuntu

apt update
apt install -y redis-server

# 启动并设置开机自启
systemctl enable --now redis-server

# 验证服务状态
systemctl status redis-server

# 查看版本
redis-server --version

CentOS / AlmaLinux / Rocky Linux

dnf install -y redis
systemctl enable --now redis

配置访问密码(requirepass)

Redis 默认无密码,任何能连上端口的进程都可以读写数据,这在生产环境是严重风险。务必设置密码:

# 打开配置文件
nano /etc/redis/redis.conf

# 找到 requirepass 行,取消注释并设置强密码:
# requirepass foobared
# 改为:
requirepass 你的强密码

# 重启 Redis 使配置生效
systemctl restart redis-server

Redis 未设密码是高危配置

互联网上有大量扫描器持续探测 Redis 6379 端口。未设密码的 Redis 可被远程写入任意数据,甚至可能被利用写入 authorized_keys 实现入侵。生产环境必须设置 requirepass

绑定地址(bind)

Redis 的 bind 配置决定它监听哪些网络接口:

bind 配置效果适用场景
bind 127.0.0.1仅本机进程可连接应用与 Redis 在同一台服务器(推荐)
bind 0.0.0.0监听所有接口需要远程连接时(务必配合防火墙和密码)
bind 127.0.0.1 ::1本机 IPv4 + IPv6双栈本地访问

如果应用与 Redis 在同一台服务器,保持 bind 127.0.0.1 是最安全的选择。

开放远程必须配合防火墙

若必须开放远程连接,bind 0.0.0.0 的同时务必在防火墙限制来源 IP,只允许可信 IP 访问 6379 端口:ufw allow from 可信IP to any port 6379

数据持久化

Redis 提供两种持久化方式,可以单独使用,也可以同时启用:

方式原理优点缺点
RDB定时快照文件小、恢复快两次快照间的数据可能丢失
AOF追加写操作日志数据更完整文件较大、重启恢复慢

在配置文件中配置 AOF:

# 开启 AOF
appendonly yes
appendfsync everysec   # 每秒同步一次,平衡性能与安全

# RDB 快照(默认已开启,可按需调整)
save 900 1    # 900 秒内有 1 次写入就触发快照
save 300 10   # 300 秒内有 10 次写入
save 60 10000 # 60 秒内有 10000 次写入

用 redis-cli 测试连接

# 本地连接并验证密码
redis-cli -a 你的强密码 ping
# 输出 PONG 表示连接成功

# 进入交互模式
redis-cli -a 你的强密码

# 基本操作
127.0.0.1:6379> SET hello "world"
127.0.0.1:6379> GET hello
127.0.0.1:6379> KEYS *
127.0.0.1:6379> INFO server

小结

  • 安装后立即设置 requirepass,这是最重要的安全步骤
  • bind 127.0.0.1 仅本地访问,不需要远程时不要改
  • RDB 适合对少量数据丢失容忍的缓存场景;AOF 适合数据完整性要求高的场景
  • 用 redis-cli ping 快速验证服务可用性
  • 定期用 redis-cli INFO 了解内存使用与命中率

常见问题

Redis 适合存什么类型的数据?

最适合缓存(热点数据、页面片段)、会话(Session)、排行榜(Sorted Set)、消息队列(List/Stream)等对读写速度要求高、可以容忍少量丢失的场景。关键业务数据仍应持久化到 MySQL/PostgreSQL。

Redis 内存用满了会怎样?

可在配置文件设置 maxmemory 限制上限,并配置 maxmemory-policy(如 allkeys-lru)决定内存不足时的淘汰策略。不设置上限,Redis 可能耗尽系统内存导致服务崩溃。

如何安全地在两台服务器之间使用 Redis?

最安全的做法是通过 SSH 隧道转发 Redis 端口,而非直接开放 6379 到公网:ssh -L 6379:127.0.0.1:6379 user@服务器IP,然后本地连接 127.0.0.1:6379 即可。

修改 redis.conf 后不生效怎么办?

确认修改了正确的配置文件路径(用 systemctl status redis-server 查看启动参数),并执行 systemctl restart redis-server 重启服务。