📢 欢迎访问本站!本站持续更新优质内容。

WordPress 双层缓存实战:Redis 对象缓存 + WP Super Cache 页面缓存

📖 本文共 1,833 字,阅读需要 7 分钟

WordPress对象缓存和页面缓存

前言

WordPress 默认每次请求都要查数据库。一个普通页面可能触发 30~100 次 SELECT 查询,每次都是磁盘 I/O。访客一多,MySQL 就成了瓶颈。

本文记录我在 2GB 内存的轻量服务器上搭建双层缓存的过程和原理。


第一层:Redis 对象缓存(减少数据库查询)

原理

WordPress 内部有个 WP_Object_Cache 类,所有数据存取都经过它:

function get_option($option) {
    $value = wp_cache_get($option, 'options');  // ← 先查缓存
    if ($value === false) {
        $value = $db->query("SELECT ...");       // ← 没有才查库
        wp_cache_set($option, $value, 'options'); // ← 写入缓存
    }
    return $value;
}

默认情况wp_cache_get/set 存在 PHP 进程内存里,请求结束就没了,下个访客重新查库。

装上 Redis 插件后object-cache.php 替换默认实现,读写目标变成 Redis 内存。

flowchart LR
    A[访客请求] --> B[WordPress]
    B --> C{Redis 里有吗?}
    C -->|✅ 命中 ~95%| D["直接返回 0.1ms"]
    C -->|❌ 未命中| E["查 MySQL 2~5ms"]
    E --> F["写入 Redis"]
默认 装上 Redis 后
存储位置 PHP 进程内存 Redis 内存
生命周期 请求结束即销毁 持久化,跨请求共享
跨访客共享

缓存了什么

缓存组 内容
options wp_options
posts 文章数据
users / usermeta 用户信息
terms 分类/标签
site-transient 瞬态数据

安装

wp plugin install redis-cache --activate --path=/www/wwwroot/你的站点 --allow-root
wp redis enable --path=/www/wwwroot/你的站点 --allow-root

第二层:WP Super Cache 页面缓存(跳过 PHP)

原理

Redis 减少了数据库查询,但每次请求仍然要走 PHP → WordPress 完整加载流程。

WP Super Cache 更进一步:把渲染好的 完整 HTML 页面 存成静态文件,下次直接返回,PHP 和 MySQL 都不碰

Redis 缓存:   问数据库? → 从内存拿(还跑 PHP)
页面缓存:     整页 HTML  → 直接返回(PHP 都不跑)⚡

两层配合

flowchart TD
    A[访客请求] --> B{Super Cache<br/>有静态 HTML?}
    B -->|✅ 有| C["直接返回 HTML<br/>不碰 PHP / MySQL"]
    B -->|❌ 没有| D[WordPress 处理]
    D --> E{Redis<br/>有缓存数据?}
    E -->|✅ 95% 命中| F[内存返回]
    E -->|❌ 未命中| G[查 MySQL]
    F --> H[渲染 HTML]
    G --> H
    H --> I[保存到 Super Cache]
    I --> C

安装

wp plugin install wp-super-cache --activate --path=/www/wwwroot/你的站点 --allow-root

然后去 WordPress 后台 → 设置 → WP Super Cache → 开启缓存


我的实际效果

服务器配置:2GB 内存 / CentOS / Nginx / PHP 8.1 / MySQL 5.7 / Redis 7.2

指标 数据
Redis 命中率 95.1%(1.4 亿次命中 / 720 万次未命中)
缓存 Key 数量 2,060 个
Redis 内存占用 6.12 MB
Super Cache 缓存文件 3 个页面(持续增长)
首页响应时间 ~0.3 秒

验证命令

# Redis 命中率
redis-cli INFO stats | grep keyspace

# 缓存文件数量
find /www/wwwroot/你的站点/wp-content/cache/ -name '[0-9]*.html' | wc -l

# WP-CLI 查看 Redis 状态
wp redis status --path=/www/wwwroot/你的站点 --allow-root

总结

优化手段 减少什么 效果
Redis 对象缓存 数据库查询 95% 查询走内存
WP Super Cache PHP 执行 整页静态化,直接返回
两者叠加 磁盘 I/O + CPU 首页 0.3s,省 80%+ 服务器资源

轻量服务器跑 WordPress,这两层缓存是最划算的投入——不改代码、不升级硬件,效果立竿见影。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部