一、问题背景:两个 WordPress 网站如何共用 Redis?
在 WordPress 网站优化过程中,Redis Object Cache 是一种常见的对象缓存方案。通过将 WordPress 对象缓存存储到 Redis 中,可以减少部分重复数据库查询和重复计算,从而改善网站后台及动态页面的响应效率。
对于运行在宝塔面板上的 WordPress 网站,如果服务器只运行一个站点,通常只需要安装 Redis 服务、启用 PHP Redis 扩展,然后安装并启用 Redis Object Cache 插件即可。
但当一台服务器同时运行两个 WordPress 网站时,就需要考虑一个问题:
两个网站能否共用同一个 Redis 服务?如果可以,如何避免两个网站的缓存数据相互混淆?
答案是可以。
本文以一台运行宝塔面板的服务器为例,介绍如何让两个独立的 WordPress 网站共用一个 Redis 服务,并通过不同的 Redis 数据库编号和缓存前缀实现逻辑隔离。
本文方案已经在实际环境中完成配置并验证,两个 WordPress 网站均已正常使用 Redis Object Cache。
二、服务器环境说明
本次测试环境如下:
| 项目 | 配置信息 |
|---|---|
| 服务器面板 | 宝塔面板 |
| 服务器配置 | 2 核 CPU、4GB 内存 |
| 网站程序 | WordPress |
| 网站数量 | 2 个独立 WordPress 网站 |
| PHP 扩展 | Redis、OPcache 已安装 |
| Redis 服务 | 已安装并正常运行 |
| 对象缓存插件 | Redis Object Cache |
| 配置方式 | 共用 Redis 服务,使用不同数据库编号 |
需要说明的是,PHP Redis 扩展与 Redis 服务是两个不同的组件。
- Redis 服务:负责存储和管理缓存数据。
- PHP Redis 扩展:负责让 PHP 程序能够与 Redis 通信。
- Redis Object Cache 插件:负责将 WordPress 的对象缓存接入 Redis。
- OPcache:缓存 PHP 编译后的字节码,与 Redis 对象缓存属于不同的优化机制。
如果服务器已经正常安装 Redis 服务和 PHP Redis 扩展,就不需要仅仅因为增加了一个 WordPress 网站而重复安装这些组件。
三、核心方案:共用 Redis 服务,使用不同数据库
Redis 支持通过逻辑数据库编号区分不同的数据集合。
例如,网站 A 使用 Redis 数据库 0,网站 B 使用 Redis 数据库 1。
两个 WordPress 网站仍然连接同一个 Redis 服务,但各自使用不同的数据库编号。
配置关系如下:
| 配置项 | 网站 A | 网站 B |
|---|---|---|
| Redis 服务 | 共用 | 共用 |
| Redis 地址 | 127.0.0.1 |
127.0.0.1 |
| Redis 端口 | 6379 |
6379 |
| Redis 数据库编号 | 0 |
1 |
| 缓存前缀 | site_a: |
site_b: |
| WordPress 插件 | Redis Object Cache | Redis Object Cache |
其中,127.0.0.1 和 6379 是常见的本地 Redis 连接配置示例,实际使用时应以服务器的 Redis 配置为准。
缓存前缀也可以替换为更容易识别的站点标识,例如 haozhuti_cn:。
这种方式不需要为每个网站单独启动一个 Redis 服务,也不需要创建两个独立的 Redis 实例。
需要注意,Redis 逻辑数据库不是独立的服务实例。两个网站仍然共享 Redis 的内存、CPU 和服务权限,因此应做好网络访问限制和资源管理。
另外,Redis Cluster 不支持通过这种方式使用多个逻辑数据库。如果服务器采用 Redis Cluster,需要使用其他隔离方案。
四、第一步:确认 Redis 服务正常运行
首先登录宝塔面板,检查 Redis 服务状态,确保服务已经正常运行。
如果可以通过 SSH 登录服务器,也可以执行以下命令检查 Redis 是否正常响应:
redis-cli ping
如果返回:
PONG
通常说明 Redis 服务能够正常响应连接请求。
如果 Redis 设置了密码,需要先使用正确的认证方式进行连接。
还需要确认 Redis 的监听地址和端口。对于运行在同一台服务器上的 WordPress 网站,通常优先使用本地连接,避免不必要的公网暴露。
五、第二步:配置第一个 WordPress 网站
进入第一个 WordPress 网站的根目录,找到 wp-config.php 文件。
例如:
/www/wwwroot/site-a.com/wp-config.php
在 wp-config.php 中找到以下注释:
/* That's all, stop editing! Happy publishing. */
在这行注释之前添加 Redis 配置:
// Redis Object Cache:网站 A
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_DATABASE', 0 );
define( 'WP_REDIS_PREFIX', 'site_a:' );
如果 Redis 服务启用了密码认证,还需要添加:
define( 'WP_REDIS_PASSWORD', '替换为实际的Redis密码' );
注意:
- 示例中的 Redis 地址、端口和密码必须与服务器实际配置一致。
- 如果
wp-config.php中已经存在相同的常量,不要重复定义,应修改现有配置。 - 如果第一个网站原本已经正常使用 Redis Object Cache,建议保留原有连接参数,只检查和补充数据库编号及缓存前缀。
完成后,第一个 WordPress 网站将使用 Redis 数据库 0。
六、第三步:配置第二个 WordPress 网站
接下来进入第二个 WordPress 网站的根目录,找到对应的 wp-config.php 文件。
例如:
/www/wwwroot/site-b.com/wp-config.php
同样在以下注释之前添加配置:
/* That's all, stop editing! Happy publishing. */
配置代码如下:
// Redis Object Cache:网站 B
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_DATABASE', 1 );
define( 'WP_REDIS_PREFIX', 'site_b:' );
如果 Redis 设置了密码,同样添加正确的认证配置:
define( 'WP_REDIS_PASSWORD', '替换为实际的Redis密码' );
两个网站可以使用相同的 Redis 地址、端口和密码,但需要分别配置不同的数据库编号。
本方案的关键区别是:
// 网站 A
define( 'WP_REDIS_DATABASE', 0 );
define( 'WP_REDIS_PREFIX', 'site_a:' );
// 网站 B
define( 'WP_REDIS_DATABASE', 1 );
define( 'WP_REDIS_PREFIX', 'site_b:' );
通过这种配置,可以避免两个网站在正常使用 Redis Object Cache 时将彼此的对象缓存当作自己的缓存数据。
需要注意,Redis 的逻辑数据库数量由服务器配置决定。常见默认配置为 16 个逻辑数据库,即编号 0 至 15,但应以实际配置为准。
七、第四步:分别启用 Redis Object Cache 插件
完成两个网站的配置文件修改后,分别登录各自的 WordPress 后台。
操作步骤如下:
- 进入「插件 → 已安装的插件」。
- 搜索并确认已经安装 Redis Object Cache。
- 启用插件。
- 进入「设置 → Redis」。
- 点击
Enable Object Cache,启用对象缓存。 - 检查插件显示的连接状态,确认 Redis 已成功连接。
插件官方地址:
https://wordpress.org/plugins/redis-cache/
两个网站需要分别启用对象缓存,不能只在其中一个网站启用后,就认为另一个网站也已经完成配置。
Redis Object Cache 通常会在每个 WordPress 网站自己的 wp-content 目录下创建或管理 object-cache.php 文件。
例如:
网站 A/wp-content/object-cache.php
网站 B/wp-content/object-cache.php
这两个文件属于各自的 WordPress 安装目录,不需要手动复制到另一个网站。
如果插件无法启用对象缓存,应检查文件权限、现有 Drop-in 文件以及 Redis 连接配置,而不是直接删除相关文件。
八、第五步:验证两个网站是否配置成功
配置完成后,需要分别进入两个网站的 WordPress 后台,检查 Redis Object Cache 的状态。
主要确认以下内容:
- Redis 服务可以正常连接。
- Redis Object Cache 插件成功启用。
- 插件没有持续报告连接错误。
- 两个网站都能够正常访问前台和后台。
- 登录、退出登录及网站原有功能没有受到影响。
如果需要进一步检查 Redis 中是否存在不同数据库的缓存数据,可以在服务器终端执行:
redis-cli INFO keyspace
在已有缓存数据的情况下,可能看到类似输出:
db0:keys=120,expires=80,avg_ttl=3600000
db1:keys=95,expires=60,avg_ttl=3600000
以上仅为格式示例,不是实际测试结果。实际键数量和过期时间会随网站访问、缓存淘汰及插件运行情况发生变化。
如果某个数据库暂时没有缓存数据,也可能不会显示对应记录。
不要为了测试而随意执行 FLUSHALL。 该命令会清空 Redis 中所有逻辑数据库的数据,可能同时影响两个网站及其他依赖 Redis 的程序。
九、Redis Object Cache 与 WP Rocket 可以同时使用吗?
可以。
Redis Object Cache 与 WP Rocket 的主要作用不同,可以在同一个 WordPress 网站中配合使用。
| 缓存类型 | 主要作用 |
|---|---|
| Redis Object Cache | 缓存 WordPress 对象,减少部分重复数据库查询和对象计算 |
| WP Rocket 页面缓存 | 根据配置缓存页面输出,减少重复执行 PHP 和生成页面的开销 |
| OPcache | 缓存 PHP 编译后的字节码,减少重复编译开销 |
三者并不是相互替代的关系。
对于包含 WooCommerce、Elementor 或其他动态功能的 WordPress 网站,合理组合页面缓存、对象缓存与 PHP 字节码缓存,有助于改善网站性能。
不过,缓存效果仍然取决于网站架构、数据库查询、插件实现、页面缓存规则和服务器资源。启用 Redis 不代表所有页面都会自动变快,也不能代替必要的性能测试。
十、2 核 4GB 服务器需要注意什么?
对于一台运行两个 WordPress 网站的 2 核 4GB 服务器,共用一个 Redis 实例通常是比较简单的部署方式。
建议重点关注以下事项:
1. 合理控制 Redis 内存占用
两个网站共享同一 Redis 实例,也共享其可用内存。
应结合服务器的实际内存情况设置 Redis 内存上限和合适的淘汰策略,避免 Redis、MySQL、PHP-FPM 等服务竞争内存。
2. 不要向公网开放 Redis 端口
Redis 应尽量监听本地地址,并通过防火墙限制不必要的访问。
不要为了方便 WordPress 连接而直接开放 6379 端口给所有公网 IP。
3. 保持缓存前缀唯一
即使两个网站使用不同的数据库编号,也建议为每个网站配置独立的缓存前缀。
如果未来增加第三个 WordPress 网站,可以继续为其分配合适的数据库编号,并使用独立前缀。
4. 不要把对象缓存与页面缓存混为一谈
如果网站出现登录状态异常、购物车异常或动态内容未更新的问题,应分别检查 Redis 对象缓存、WP Rocket 页面缓存以及相关插件的缓存规则。
不同类型的缓存需要采用不同的排查方法。
十一、常见问题
问题 1:两个网站必须安装两套 Redis 服务吗?
不需要。
在同一台服务器上,两个 WordPress 网站通常可以共用一个 Redis 服务,通过不同的逻辑数据库编号和缓存前缀实现缓存隔离。
问题 2:两个网站可以使用同一个 Redis 数据库编号吗?
技术上可以,但如果没有可靠的键前缀隔离,可能出现缓存键冲突或相互影响。
因此,针对两个独立网站,建议优先使用不同的数据库编号,并为每个网站设置唯一的缓存前缀。
问题 3:PHP Redis 扩展需要安装两次吗?
不需要。
PHP Redis 扩展安装在对应的 PHP 运行环境中。如果两个网站使用同一个 PHP 版本和运行环境,并且扩展已经正确启用,通常可以直接共用。
如果两个网站使用不同的 PHP 版本,则需要分别确认各自 PHP 环境中的 Redis 扩展是否已启用。
问题 4:两个网站都安装 Redis Object Cache 插件后,是否会自动使用不同的数据库?
不一定。
如果两个网站使用相同的默认配置,它们可能连接到相同的 Redis 数据库。因此,需要在各自的 wp-config.php 中明确设置不同的数据库编号和缓存前缀。
问题 5:Redis 数据库编号不同,就完全独立了吗?
不是。
不同逻辑数据库可以隔离正常的键访问,但它们仍然共享同一个 Redis 服务实例、内存、CPU 和服务级配置。
如果有严格的安全隔离、不同权限或独立资源配额要求,应考虑使用独立 Redis 实例或其他隔离架构。
十二、总结
对于宝塔面板上运行两个 WordPress 网站的服务器,如果 Redis 服务和 PHP Redis 扩展已经安装完成,可以采用共用 Redis 服务的方案,不需要为每个网站单独部署一套 Redis。
核心配置只有三点:
- 两个网站连接同一个 Redis 服务。
- 在各自的
wp-config.php中设置不同的WP_REDIS_DATABASE。 - 为两个网站设置不同的
WP_REDIS_PREFIX,然后分别启用 Redis Object Cache。
本文方案已经在实际环境中完成配置并验证,两个 WordPress 网站均已正常工作。
对于中小型 WordPress 网站,这种方案配置简单、维护成本低,也方便后续扩展更多网站。但在正式部署时,仍应结合服务器内存、Redis 安全配置及网站实际负载进行评估。
本文由 好主题 原创整理,致力于分享实用的 WordPress 建站知识与主题开发经验。 我们专注于提供高质量的 WordPress企业主题 资源,帮助中小企业轻松构建专业网站。 转载请注明来源,并保留原文链接,感谢您的支持与理解。