同服务器多个WordPress网站,使用持久化对象缓存的注意事项

WordPress对象缓存的作用,以及对象缓存的种类

持久化对象缓存作为WordPress官方推荐的必要缓存手段,可以极大的降低WordPress对服务器的资源消耗,并且能够极大的加快网站的响应速度,但如果我们的同一台服务器部署了多个WordPress网站,就需要注意隔离他们的缓存,否则可能会造成缓存串站的混乱情况。

 

WordPress的缓存层次

内部对象缓存:WordPress核心自带的非持久化缓存,请求结束后销毁
持久对象缓存:Redis/Memcached等外部系统提供,跨请求持久化
页面缓存:完整HTML页面缓存
操作码缓存:PHP字节码缓存(OPcache)

Redis和Memcached主要实现持久对象缓存层,替代WordPress默认的非持久化缓存。

 

Redis介绍

Redis作为高级键值存储系统,通过替换WordPress默认的对象缓存机制工作。当WordPress请求数据(如文章、选项)时,首先检查Redis中是否存在对应缓存项;若命中则直接返回数据,跳过数据库查询;若未命中则从数据库获取数据后序列化存入Redis,并设置过期时间。Redis的核心优势在于支持丰富数据结构、数据持久化以及精确的缓存失效控制,能有效处理高并发请求。它通过唯一键前缀隔离多站点数据,利用内存高速读写特性,将数据库查询时间从毫秒级降至微秒级,显著提升WordPress响应速度和扩展能力,特别适合中大型站点和复杂应用场景。

小配置服务器使用Redis,如4核4G以下的服务器,可能会出现Redis挂掉的情况,导致数据库错误,中小型网站不推荐。

 

Memcached介绍

Memcached作为轻量级分布式内存缓存系统,通过WordPress对象缓存API集成到请求流程中。其工作原理是拦截数据库查询结果,将序列化后的数据存储在内存中,后续相同请求直接从内存读取。不同于Redis,Memcached采用更简单的架构,不支持数据持久化和复杂数据结构,但具有极低的系统开销和更高的吞吐量。在WordPress中,它使用"软清空"机制管理缓存失效——通过全局版本号标记而非实际删除数据,依赖LRU算法自动淘汰旧项。Memcached内存管理采用预分配slab机制,虽配置简单但缺乏精细控制,最适合高流量、简单缓存需求的WordPress站点,尤其在内存资源有限的环境中表现优异。

中小型配置服务器,强烈推荐。

 

同服务器多个网站配置Memcached需要注意

 

1.强制缓存键隔离

每个站点必须配置唯一前缀:这是Memcached多站点环境最关键的要求,前缀需足够独特:建议包含站点域名或ID,避免任何可能的冲突
无前缀隔离的严重后果:会导致用户登录状态混乱、内容交叉显示等严重安全问题,配置文件wp-config.php中添加配置代码:

define('WP_CACHE_KEY_SALT', 'site1_'); //每个站点使用不同前缀,site1_,可以用你的域名替代,如themepark.com.cn可以替代为:themepark_com_cn

 

2.每个WordPress的数据库表前缀不要设为一样

如果你的多个WordPress网站的表前缀都设为一样的话,即时加入了缓存键值隔离,也可能会出现数据内容交叉混乱的问题,所以最根本的解决方式是各个WordPress网站的表前缀不要设为一样,特别是开启了WordPress多站点的网站,一定不要和其他WordPress网站的数据库表前缀一样,否则大概率会出现问题。

 

3.设置定时清理缓存,宝塔可以设置每日自动释放缓存

Memcached的特性是储存数据到内存中,我们可以通过每日自动释放缓存的计划任务来定时清理缓存,如果你使用的宝塔面板,可以在计划任务中,设置每日凌晨释放缓存的计划即可。

 

4.故障隔离

添加配置单个站点Memcached故障时回退到内部缓存,配置文件wp-config.php中添加配置代码

define('WP_MEMCACHED_DISABLE_FAILBACK', false);

 

同服务器多个网站配置Redis需要注意

 

1.缓存键隔离

必须为每个站点设置唯一前缀,可以在配置文件wp-config.php中添加配置代码:

define('WP_CACHE_KEY_SALT', 'site1_'); // 每个站点使用不同前缀,site1_,可以用你的域名替代,如themepark.com.cn可以替代为:themepark_com_cn
define( 'WP_REDIS_PREFIX', '你的域名' );

 

2.Redis数据库分离

在配置文件中为每个站点分配独立数据库:

define('WP_REDIS_DATABASE', '0'); // 站点1使用DB 0

Redis默认提供16个数据库(0-15),合理分配可实现物理隔离

 

3.连接配置优化

避免重复连接:配置连接池或持久连接,设置合理超时:防止一个站点的问题影响其他站点

在配置文件中加入以下配置

define('WP_REDIS_TIMEOUT', '1'); // 秒
define('WP_REDIS_READ_TIMEOUT', '1'); // 秒

 

4.安全隔离措施

为Redis启用密码访问,在WordPress中配置密码:

define('WP_REDIS_PASSWORD', '你的Redis密码');

 

上一篇:

如未标明出处,所有文章均为WEB主题公园原创,如需转载,请附上原文地址,感谢您的支持和关注。

本文地址:https://www.themepark.com.cn/tfwqdgwordpresswzsydxhcdzysx.html