wordpress多库的redis风险规避

两个 WordPress站点在同一个服务器上开启 Redis 缓存,如果它们使用相同的表前缀(数据库)和相同的 Redis 缓存前缀,那么它们将无法区分各自的数据。会造成严重影响,并且会发生数据混乱(俗称“串表”或“数据冲突”)。

两个 WordPress主题在同一个服务器上开启 Redis 缓存,如果它们使用相同的表前缀(数据库)和相同的 Redis 缓存前缀,那么它们将无法区分各自的数据。

下面是详细的分析和解决方案:

严重影响分析

1. Redis 缓存冲突(主要问题)

Redis 缓存插件(如 Redis Object Cache)的工作原理是:

  1. 它将 WordPress 的数据库查询结果、选项、用户会话等对象序列化后存入 Redis。
  2. 为了区分不同的数据,它会使用一个前缀,通常是:数据库表前缀 + 主机名wp-config.php 中定义的 WP_CACHE_KEY_SALT

如果两个站点都使用默认配置且表前缀相同 (如 wp_):

  • 站点 A 写入一个选项(例如:siteurl),在 Redis 中可能存储为 wp_options:siteurl
  • 站点 B 写入自己的同名选项(例如:siteurl),它也会尝试存储到 wp_options:siteurl 这个键,覆盖了站点 A 的数据。

结果: 两个站点将不断地从 Redis 中读取和写入对方的缓存数据,导致:

  • 配置项混淆: 站点 A 可能会加载站点 B 的主题设置、插件设置或站点标题。
  • 登录会话错乱: 用户登录状态可能混乱,导致用户莫名其妙地登录到另一个站点。
  • 数据错误: 随机出现 404 错误、内容加载不正确等问题。

您需要从根本上区分这两个站点的缓存和数据库。

步骤一:解决 Redis 缓存冲突(关键)

必须给每个 WordPress 站点设置一个唯一的缓存盐(Cache Key Salt),以确保它们在 Redis 中使用不同的前缀。

在两个站点的 wp-config.php 文件中,分别添加或修改 WP_CACHE_KEY_SALT 常量:

对于 站点 A 的 wp-config.php

/**
* 确保站点 A 在 Redis 中使用独一无二的前缀
* (可以替换为任何唯一的字符串,例如 'sitea_')
*/
define('WP_CACHE_KEY_SALT', 'sitea_salt_');

对于 站点 B 的 wp-config.php

/**
* 确保站点 B 在 Redis 中使用独一无二的前缀
* (可以替换为任何唯一的字符串,例如 'siteb_')
*/
define('WP_CACHE_KEY_SALT', 'siteb_salt_');

操作后:

  • 站点 A 的缓存键:sitea_salt_options:siteurl
  • 站点 B 的缓存键:siteb_salt_options:siteurl

这样它们就可以独立安全地使用同一个 Redis 实例了。

我爱主题网 自2012
主题:260+ 销售:1000+
兼容浏览器

电话咨询

7*12服务咨询电话:

1855-626-3292

微信咨询