Skip to content
VDS · 数据库

Redis:缓存与队列

在 VDS 上安装 Redis、设置密码并绑定到本地地址、内存限制与淘汰策略,以及缓存与队列的区别。

更新于 2026年8月23日

Redis 将数据保存在内存中,因此常用于缓存、会话、计数器和任务队列。在 VPS 上,它只有在内存装得下时才有用:工作集大于可用内存时,它不再是加速手段,反而会导致崩溃。

安装

apt update && apt install -y redis-server        # Debian, Ubuntu
dnf install -y redis                             # AlmaLinux, CentOS Stream
systemctl enable --now redis-server
redis-cli ping

返回 PONG 表示服务器正在运行。

必要配置

/etc/redis/redis.conf 文件:

bind 127.0.0.1
protected-mode yes
requirepass long-random-password
maxmemory 512mb
maxmemory-policy allkeys-lru
appendonly no
systemctl restart redis-server
redis-cli -a 'password' ping

扫描器会在几分钟内发现暴露在互联网上、没有密码的 Redis,并将其用于挖矿。如果您的应用在同一台机器上,请保留 bind 127.0.0.1,不要将 6379 端口暴露到外部。如果需要外部访问,请只使用 SSH 隧道或 VPN。

内存与淘汰

请显式设置 maxmemory:不设置的话,Redis 会一直增长,直到系统开始终止进程。给它分配该档位内存的四分之一是合理的。

档位机器内存maxmemory
VDS-12 GB256 MB
VDS-24 GB512 MB
VDS-38 GB1–2 GB
VDS-524 GB4–6 GB

策略取决于用途:

  • 缓存 — allkeys-lru,旧键会被静默淘汰;
  • 任务队列 — noeviction,丢失任务不可接受,写入报错反而更好。

不要将缓存和队列混在同一个数据库中,正是因为这一矛盾。请将它们分到不同的数据库编号(SELECT 1)或两个实例中。

持久化到磁盘

默认情况下,Redis 会定期将快照转储到 dump.rdb。对于纯缓存来说,这是不必要的磁盘写入 — 请禁用 save。对于队列,请启用 appendonly yes:这样机器重启后任务不会丢失。

请注意,磁盘写入速度受档位限制:每核心 60 MB/s,不低于 60 且不高于 400 MB/s。

监控

redis-cli -a 'password' info memory
redis-cli -a 'password' info stats
redis-cli -a 'password' --stat
redis-cli -a 'password' slowlog get 10

关键指标是 evicted_keys:持续增长意味着内存不足,缓存没有带来收益。

常见错误

现象原因
NOAUTH Authentication required应用未获得密码
OOM command not allowed在 noeviction 策略下达到了 maxmemory
DENIED Redis is running in protected mode在 bind 127.0.0.1 的情况下进行外部访问 — 这是设计如此
重启后数据消失未启用持久化
机器进入 swapmaxmemory 与其他服务之和超过了该档位的内存

不要在生产服务器上使用 KEYS *:该命令在遍历所有键时会阻塞 Redis。请使用 SCAN 进行遍历。