为什么 Redis 能加速网站
动态网站在每次请求时都会反复重建相同的数据,从而不断地访问数据库。Redis 是一种内存数据存储,它从 RAM 中返回查询结果,耗时不到一毫秒,而无需反复查询数据库。这降低了数据库负载,并加快了页面的交付速度,在流量较大时尤为明显。
前置条件
- 具有 root 或 sudo 权限的 Linux 服务器(Ubuntu 22.04/24.04 或类似系统)
- 支持对象/缓存后端的 Web 应用(WordPress、Laravel 等)
- 对于基于 PHP 的应用,需要 PHP redis 扩展
第 1 步 —— 安装 Redis
在 Debian/Ubuntu 上:
sudo apt update
sudo apt install redis-server -y
启用并确认其正在运行:
sudo systemctl enable --now redis-server
redis-cli ping
你应当看到 PONG。确认版本(建议使用 Redis 6+ 以获得 ACL 和 TLS 支持):
redis-server --version
第 2 步 —— 加固 Redis
默认情况下,Redis 仅监听 localhost,这适用于单服务器部署。在 /etc/redis/redis.conf 中确认:
bind 127.0.0.1 -::1
protected-mode yes
设置一个强密码作为纵深防御措施:
requirepass YOUR_STRONG_PASSWORD_HERE
如果必须从另一台服务器访问 Redis,应启用 TLS 并设置防火墙限制,而不是开放绑定地址。将未经身份验证的 Redis 暴露到公共互联网是一种常见的安全漏洞。
重启以应用更改:
sudo systemctl restart redis-server
测试身份验证:
redis-cli -a 'YOUR_STRONG_PASSWORD_HERE' ping
第 3 步 —— 针对缓存调优 Redis
设置内存上限和淘汰策略,以防止服务器资源耗尽。编辑 /etc/redis/redis.conf:
maxmemory 256mb
maxmemory-policy allkeys-lru
maxmemory限制 RAM 使用量;通常设为可用缓存内存的 60–75%allkeys-lru在达到上限时淘汰最近最少使用的键(适用于纯缓存场景)
重启 Redis:
sudo systemctl restart redis-server
第 4 步 —— 将 WordPress 连接到 Redis
首先安装 PHP 扩展:
sudo apt install php-redis -y
sudo systemctl restart php8.3-fpm # match your PHP version
在 wp-config.php 中、/* That's all, stop editing! */ 这一行的上方添加连接设置:
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', 'YOUR_STRONG_PASSWORD_HERE' );
define( 'WP_REDIS_PREFIX', 'site1:' );
define( 'WP_REDIS_DATABASE', 0 );
当多个站点共用同一个 Redis 实例时,WP_REDIS_PREFIX 可防止缓存冲突。
安装并启用 Redis Object Cache 插件。在仪表盘中依次进入 插件 → 安装插件,搜索 Redis Object Cache,将其激活,然后打开 设置 → Redis 并点击 启用对象缓存。或者,使用 WP-CLI:
wp plugin install redis-cache --activate
wp redis enable
确认状态:
wp redis status
输出应显示 Status: Connected 和 Drop-in: Valid。
第 5 步 —— 连接原生 PHP 应用
phpredis 扩展提供了直接的客户端访问能力。一个最简的旁路缓存(cache-aside)模式如下:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('YOUR_STRONG_PASSWORD_HERE');
$key = 'products:featured';
$cached = $redis->get($key);
if ($cached === false) {
$data = expensive_db_query(); // your DB call
$redis->setex($key, 300, serialize($data)); // cache for 300s
} else {
$data = unserialize($cached);
}
该模式先检查缓存,命中时直接返回;未命中时计算该值,以一个 TTL 将其存储,然后返回。像 Laravel 这样的框架进一步简化了这一过程——在 .env 中设置 CACHE_STORE=redis 和 SESSION_DRIVER=redis 即可。
第 6 步 —— 验证性能提升
实时监控缓存活动:
redis-cli -a 'YOUR_STRONG_PASSWORD_HERE' monitor
检查命中率以评估缓存健康状况:
redis-cli -a 'YOUR_STRONG_PASSWORD_HERE' info stats | grep keyspace
使用 ab 或 curl 对页面在启用 Redis 前后进行基准测试:
ab -n 200 -c 10 https://your-site.example/
比较多次运行的平均响应时间。数据库密集型的 WordPress 首页通常会在首字节时间(TTFB)上出现明显下降,同时 MySQL 负载也会降低。
| 设置项 | 推荐值 | 用途 |
|---|---|---|
bind |
127.0.0.1 -::1 |
仅限本地访问 |
requirepass |
强密钥 | 身份验证 |
maxmemory |
256mb(之后再调优) | 防止内存溢出(OOM) |
maxmemory-policy |
allkeys-lru |
淘汰旧的缓存键 |
WP_REDIS_PREFIX |
每个站点唯一 | 避免冲突 |
常见陷阱
- 没有内存上限。 若不设置
maxmemory,Redis 会耗尽所有 RAM 并使服务器崩溃 - 缓存未生效。 仅安装插件是不够的;你必须启用 drop-in 并确认连接成功
- 内容陈旧。 过于激进的缓存会提供过期页面;应使用合理的 TTL,并在部署时刷新缓存
- Redis 暴露在外。 切勿在没有 TLS 和身份验证的情况下将 Redis 绑定到公网 IP
在境内云上运行
Redis 与配置得当的服务器配合得很好。Skyline Cloud 提供托管于沙特阿拉伯境内的 VPS 和云服务器,满足 PDPL 和 NCA 的合规要求。与托管型企业邮箱相结合,即可构建一套完整的基础设施。
创建你的 Skyline Cloud 账户,几分钟内即可部署一台境内服务器。
Comments
0 total · 0 threads