
Redis 是一款内存数据库,将数据保存在 RAM 中,读取速度比 MySQL 或磁盘存储快数百倍。它非常适合用于会话缓存、对象缓存、任务队列和请求限速。本教程将带您在 Ubuntu VPS 上安装 Redis,并将其与 PHP 和 WordPress 连接。
系统要求
- Ubuntu 20.04、22.04 或 24.04 LTS 的 VPS
- 至少 512 MB 内存(建议 1 GB 以上)
- Root 或具有 sudo 权限的用户
第一步:安装 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-serverallkeys-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,通常能明显提升命中率。
小结
- 通过 apt 安装 Redis,并将 maxmemory 设置为总内存的 25%
- 始终 bind 127.0.0.1——切勿将 Redis 暴露于公网
- 安装 php-redis 以连接 PHP 应用
- 在 WordPress 上使用 Redis Object Cache 插件减少数据库查询
- 通过 redis-cli info stats 监控缓存,保持命中率 80% 以上
需要一台运行 Redis 的 VPS?
AsiaGB Linux VPS 起步价 ฿500/月 · 完整 Root 权限 · SSD 存储 · 不限流量 · 自由选择 Ubuntu 版本
查看 VPS 套餐