在 Ubuntu VPS 上安装 Redis 缓存

Redis 是一款内存数据库,将数据保存在 RAM 中,读取速度比 MySQL 或磁盘存储快数百倍。它非常适合用于会话缓存、对象缓存、任务队列和请求限速。本教程将带您在 Ubuntu VPS 上安装 Redis,并将其与 PHP 和 WordPress 连接。

系统要求

第一步:安装 Redis

更新软件包列表并安装 Redis:

apt update && apt install redis-server -y

验证 Redis 是否正在运行:

systemctl status redis-server

进行快速连接测试:

redis-cli ping

若返回 PONG,则表示 Redis 已成功启动。

第二步:配置 Redis

编辑主配置文件:

nano /etc/redis/redis.conf

限制内存用量

找到 # maxmemory,将其设置为总内存的约 25%:

maxmemory 256mb maxmemory-policy allkeys-lru

仅绑定本地回环地址

确保 bind 配置行如下所示:

bind 127.0.0.1 -::1

启用持久化存储(推荐)

让 Redis 将快照写入磁盘,以便重启后数据不会丢失:

save 900 1 save 300 10 save 60 10000

重新加载配置:

systemctl restart redis-server systemctl enable redis-server

allkeys-lru 表示内存满时,Redis 将淘汰最近最少使用的键——这是通用缓存场景的最佳策略。

第三步:在 PHP 中使用 Redis

安装 PHP Redis 扩展:

apt install php-redis -y systemctl restart php8.2-fpm # adjust to your PHP version

通过 PHP 脚本进行测试:

<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // Store a value $redis->set('test_key', 'Hello Redis!', 60); // expires in 60 seconds // Retrieve it echo $redis->get('test_key'); // Hello Redis! ?>

第四步:在 WordPress 中使用 Redis

Redis 通过将数据库查询结果缓存在内存中,避免每次请求都访问 MySQL,从而大幅提升 WordPress 的响应速度。

安装插件

从 WordPress 插件库安装 Redis Object Cache 插件,然后进入 设置 → Redis Object Cache → 启用对象缓存。

或在 wp-config.php 中手动配置

define('WP_REDIS_HOST', '127.0.0.1'); define('WP_REDIS_PORT', 6379); define('WP_CACHE', true);

实际效果:启用 Redis Object Cache 的 WordPress 网站,响应时间通常可缩短 30–60%,因为重复的数据库查询将直接从内存中返回,而非磁盘。

第五步:监控与清除缓存

实时命令监控

redis-cli monitor # watch all commands in real time redis-cli info stats # hit/miss ratio redis-cli info memory # RAM usage breakdown

检查命中率

redis-cli info stats | grep -E "keyspace_hits|keyspace_misses"

健康的缓存命中率应在 80% 以上。若低于此值,请适当增大 maxmemory,以允许更多数据保留在缓存中。

清除全部缓存

redis-cli flushall

生产环境中正确安装 Redis

在 VPS 的正式生产环境中,安装时需要比单纯执行 apt install 更为细致——需要验证版本号、确认服务运行账号,并启用 systemd 单元以确保重启后 Redis 自动运行。以下步骤在 AsiaGB VPS(起步价 ฿500/月)的 Ubuntu 22.04 LTS 上经过测试,该 VPS 提供完整 root 权限,所有命令均可无限制执行。

首先更新系统并安装 Redis 及所需工具:

apt update && apt upgrade -y
apt install redis-server redis-tools -y
redis-server --version
redis-cli --version

确认 Redis 正在运行,并设置为开机自启动:

systemctl enable --now redis-server
systemctl status redis-server --no-pager
redis-cli ping        # should return PONG

在 Ubuntu 上,Redis 默认以专属的 redis 用户身份在 systemd 下运行。可用以下命令验证:

ps -u redis -o pid,cmd
ss -tlnp | grep 6379    # must bind to 127.0.0.1:6379 only

如果 ss 显示 Redis 监听在 0.0.0.0:6379(所有接口),说明它已暴露于公网,必须立即按照下方安全配置章节修复。无密码的公开 Redis 是 VPS 上最常被扫描和利用的安全漏洞之一。

将 Redis 用作 WordPress 和 Laravel 的缓存

在 VPS 上运行 Redis 最直接的收益,是将其用作 WordPress 和 Laravel 的对象缓存与会话存储。将数据库和文件系统的压力转移到内存,每个请求的响应速度都会大幅提升——尤其是插件较多或查询复杂的网站。

WordPress — 对象缓存

安装 Redis Object Cache 插件后,在 wp-config.php 中添加以下配置,以隔离每个站点的缓存(当一个 Redis 实例服务多个站点时尤为重要):

define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_CACHE_KEY_SALT', 'mysite_');  // prefix to avoid key collisions
define('WP_REDIS_MAXTTL', 86400);
define('WP_CACHE', true);

然后进入 设置 → Redis,点击"启用对象缓存"。连接成功后将显示 Connected 状态,随着流量增加命中率也会逐步提升。

Laravel — 缓存与会话

Laravel 通过 predis/predis 包或 PhpRedis 扩展原生支持 Redis。在 .env 文件中配置:

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=your_chosen_password
REDIS_PORT=6379

在 Laravel 中将耗时查询结果缓存 10 分钟的示例:

use Illuminate\Support\Facades\Cache;

$users = Cache::remember('active_users', 600, function () {
    return User::where('active', 1)->get();
});

将会话迁移至 Redis 后,扩展也更容易——会话不再依赖单台机器上的文件,非常适合高并发网站。

技巧:对单个 Redis 实例上的不同应用或网站,使用不同的 WP_REDIS_DATABASE 或 REDIS_DB 编号(0–15)来隔离缓存。这样可以只清除某个站点的缓存,而不影响其他站点。

Redis 安全加固(bind、requirepass、protected-mode)

Redis 设计上默认运行于可信的内部网络,因此默认配置并不注重安全性。对于有公网 IP 的 VPS,必须关闭所有外部访问——否则扫描 6379 端口的僵尸网络可能在几分钟内控制服务器,用于挖矿或发动攻击。

1. 绑定本地回环并启用保护模式

编辑 /etc/redis/redis.conf,确保以下值已正确设置:

bind 127.0.0.1 -::1
protected-mode yes
port 6379

protected-mode yes 会自动拒绝没有密码的外部连接——这是第一道防线。

2. 使用 requirepass 设置密码

生成一个足够长且随机的密码,并写入配置文件:

# generate a random 32-byte password
openssl rand -base64 32

# in /etc/redis/redis.conf add:
requirepass your_long_random_password_here

设置密码后,连接时需先通过身份验证才能执行命令:

redis-cli
127.0.0.1:6379> AUTH your_long_random_password_here
OK

3. 禁用或重命名危险命令

FLUSHALL、CONFIG、KEYS 等命令可能清空数据或导致拒绝服务。在配置中禁用或重命名它们:

rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG "CONFIG_a8f3k2"

4. 添加防火墙层

使用 UFW 在外部屏蔽 6379 端口,以提供额外保障:

ufw deny 6379
ufw reload

修改完成后,重启 Redis 使配置生效:

systemctl restart redis-server

警告:切勿在有公网 IP 的 VPS 上设置 bind 0.0.0.0。如果其他机器上的应用需要连接 Redis,请使用 SSH 隧道或数据中心内网,而非将端口暴露于公网。

配置 maxmemory、淘汰策略与监控

VPS 的内存是有限的,因此必须限制 Redis 的内存上限,避免触发 OOM Killer。使用 maxmemory 设置上限,使用 maxmemory-policy 决定内存满时的处理方式。

选择合适的淘汰策略

策略 内存满时的行为 适用场景
allkeys-lru 淘汰最近最少使用的键 通用缓存、WordPress
allkeys-lfu 淘汰访问频率最低的键 热点键明显的缓存场景
volatile-lru 仅淘汰设有 TTL 的键 缓存与持久化数据混用
noeviction 拒绝新写入(返回错误) 将 Redis 用作真实数据库

2 GB 内存 VPS 的推荐配置(分配约 512 MB 给 Redis):

maxmemory 512mb
maxmemory-policy allkeys-lru
maxmemory-samples 5

监控实际使用情况

定期使用以下命令检查 Redis 运行状态:

redis-cli info memory | grep used_memory_human
redis-cli info stats | grep -E "keyspace_hits|keyspace_misses|evicted_keys"
redis-cli --stat        # live figures every second
redis-cli dbsize        # total number of keys

命中率计算公式为 hits / (hits + misses),应保持在 80% 以上。若 evicted_keys 持续增长,说明内存不足,需增大 maxmemory 或升级 VPS 套餐。

重要提示:不要将 maxmemory 设置得接近 VPS 总内存,因为操作系统和其他服务(PHP-FPM、MySQL、Nginx)同样需要内存。经验法则是:Redis 占用不超过总内存的 25–40%。

常见问题解答(FAQ)

Redis 与 Memcached 有什么区别?

两者都是内存缓存,但 Redis 支持更丰富的数据结构(列表、哈希、集合、有序集合),可持久化到磁盘,并提供 Pub/Sub 和主从复制功能。Memcached 更简单轻量,适合纯键值缓存。对于大多数 VPS 工作负载,Redis 的功能更强大且更灵活。

运行 Redis 需要多大内存的 VPS?

Redis 本身只需数十 MB 即可启动,但实际使用中建议至少 1 GB 内存,以便为操作系统、Web 服务器和 Redis 缓存都留有余量。AsiaGB VPS 起步价 ฿500/月,基于 Ubuntu 系统,可轻松运行 Redis。

VPS 重启后 Redis 数据会丢失吗?

这取决于持久化配置。若启用了 RDB 快照(save 指令)或 AOF,重启后 Redis 会自动恢复数据。若仅将 Redis 用作缓存,数据丢失并不是问题——系统会自动从数据源(如 MySQL)重建缓存。

为什么 Redis 命中率很低?

常见原因包括:maxmemory 设置过小(键被频繁淘汰)、TTL 过短,或应用中缓存键不一致。增大 maxmemory、检查 evicted_keys 并调整 TTL,通常能明显提升命中率。

小结

需要一台运行 Redis 的 VPS?

AsiaGB Linux VPS 起步价 ฿500/月 · 完整 Root 权限 · SSD 存储 · 不限流量 · 自由选择 Ubuntu 版本

查看 VPS 套餐

查看泰国VPS主机全部套餐 →