服务器下多个WordPress站点同时安装Redis Object Cache,网站数据混乱跳站?

大家好,我是自由超。很多站长用LiteSpeed Cache+Redis+Redis Object Cache这套方案来提升网站速度,实际也确实可以极大的提升WordPress网站速度,但是在同一个服务器下面多个站点同时使用这套方案的时候,会出现数据库混乱的情况,主要表现就是网站会出现跳站的情况,比如明明访问的是A站,却跳到B站。别着急,这篇文章和大家分享下为什么会数据混乱,以及如何正确设置Redis Object Cache才能避免这个问题,以及使用Redis一些注意事项。

为什么要使用Redis?

WordPress采用的是动态数据库查询技术。网站用户访问每篇文章或页面,都会向数据库发送一条查询命令,数据库根据命令查询之后,反送查询结果。当访问量大的时候,会出现频繁的查询。大量频繁的查询会极大的减慢网站响应速度,极易造成服务器崩溃。 为了解决这个数据查询过多死机的问题。数据库缓存技术应运而生,其中最厉害的就是Redis和Memcached。而Redis更胜一筹,Redis可以有效的减少数据库查询次数。它采用key-value分布式存储系统,根据关键词值进行查询,弥补了Memcached的不足。用Redis进行数据库缓存,网站数据查询速度会更快,支持的并发数更多。

使用Redis给WordPress网站加速主要有以下几个原因:

  1. 高性能:Redis是一个高性能的内存数据库,读写速度非常快。将经常访问的数据缓存到Redis中,可以大大减轻数据库的压力,提高网站的响应速度。
  2. 易于集成:WordPress有许多优秀的Redis缓存插件,如Redis Object Cache、WP Redis等,可以方便地将Redis集成到WordPress中,无需复杂的配置。
  3. 数据持久化:Redis支持数据持久化,可以将内存中的数据定期写入磁盘,避免数据丢失。这对于保证缓存数据的安全性非常重要。
  4. 支持多种数据结构:Redis不仅支持简单的键值对,还支持哈希、列表、集合、有序集合等多种数据结构,可以满足不同的缓存需求。

与Memcached相比,Redis有以下优势:

  1. 数据持久化:Memcached是纯内存数据库,不支持数据持久化,一旦服务器重启或崩溃,缓存数据就会丢失。而Redis支持数据持久化,可以将数据写入磁盘,更加安全可靠。
  2. 支持更多数据结构:Memcached只支持简单的键值对,而Redis支持多种数据结构,如哈希、列表、集合等,可以满足更多的应用场景。
  3. 支持数据备份和恢复:Redis支持数据备份和恢复,可以方便地将数据备份到其他服务器,或者从备份中恢复数据,提高了数据的安全性和可用性。
  4. 支持发布/订阅:Redis支持发布/订阅功能,可以用于实现实时通信和消息推送等功能。

当然,Memcached也有其优势,主要体现在:

  1. 简单易用:Memcached的使用和配置都非常简单,适合快速上手和部署。
  2. 内存利用率高:Memcached的内存管理机制比较简单,内存利用率比Redis要高一些。
  3. 多线程支持:Memcached支持多线程,可以更好地利用多核CPU的性能。

总的来说,Redis和Memcached各有优劣,选择哪一个需要根据具体的应用场景和需求来决定。对于WordPress网站来说,如果需要高性能、数据持久化、支持多种数据结构等特性,使用Redis是更好的选择。如果对性能要求不高,只需要简单的键值对缓存,使用Memcached也可以满足需求。

数据库混乱原因

实测在同一个服务器下面安装并启用了Redis Object Cache的网站会跳站。没有安装启用Redis Object Cache插件的网站不会。

为什么会出现这样的情况呢?我们从启用Redis功能说起:

步骤1:以宝塔为例,服务器PHP设置里面安装Redis扩展,默认创建16个Redis数据库(序号0-15)。

步骤2:安装Litespeed Cache缓存插件,在【缓存设置】、【对象】里面【Redis数据库】默认是【0】

步骤3:网站后台搜索安装Redis Object Cache插件,在【设置】、【Redis】,点击【启用对象缓存】按钮即可。但在设置里面没有指定数据库序号的选项,默认使用Redis的第一个数据库【0】,并且使用相同的前缀。

从上面可以看出,同一个服务器下面,所有网站都安装启用Redis Object Cache插件,默认使用相同的Redis缓存前缀,这就导致每个网站的数据缓存无法正确区分,从而导致网站在调用数据库的时候出现混乱。

解决方案

安装启用了Redis Object Cache的网站,在网站根目录下面,找到配置文件wp-config.php,添加以下代码,此段代码能够实现salt key来区分不同站点的Redis数据缓存前缀。

代码添加在配置文件代码注释之后即可,也可以放在底部注释之前。

define( 'WP_CACHE_KEY_SALT', '自定义' );
define( 'WP_REDIS_SELECTIVE_FLUSH', true );

第一行代码:给Redis数据缓存设置一个自定义的前缀。自定义可以是域名也可以是其他,英文格式,也可带数字。这样就能让不同网站使用不同的数据缓存前缀,能够区分开来。

第二行代码:刷新Redis数据缓存时是否只刷新当前站点,如果设置为【false】代表刷新全部站点,如果设置为【true】,只刷新当前站点。

使用Redis,PHP版本要一致

同一个服务器下面的网站最好使用同一个版本的PHP,因为Redis默认只能安装在一个版本的PHP,不能在不同版本PHP同时安装。安装Redis版本的PHP,使用这个版本PHP的网站可以加速,使用其他版本PHP的网站无法使用Redis加速。

正确停用Redis Object Cache插件

正确停用Redis Object Cache插件的步骤如下:

  1. 在WordPress仪表盘中导航到”插件”页面。
  2. 找到”Redis Object Cache”插件,点击”停用”链接。这将停止WordPress使用Redis缓存。
  3. 在网站的根目录下找到wp-config.php文件,编辑它。
  4. 找到类似如下的行: define( 'WP_REDIS_CLIENT', 'pecl' ); 将其注释掉或删除。
  5. 如果wp-config.php中有其他与Redis相关的常量定义,如WP_CACHEWP_REDIS_HOSTWP_REDIS_PORT等,也需要一并注释掉或删除。
  6. 保存wp-config.php文件。
  7. 如果你的网站使用了多台Web服务器,需要在每一台服务器上重复步骤3-6。
  8. 最后,还需要清空Redis中的缓存数据。可以通过以下命令实现: redis-cli FLUSHALL 这将删除Redis中的所有键值对,包括WordPress对象缓存。

完成以上步骤后,Redis Object Cache插件就被正确停用了。此时,WordPress将不再使用Redis缓存,而是切换回默认的数据库查询方式。

需要注意的是,停用插件后网站的性能可能会有所下降,因为所有的数据都需要实时从数据库获取。如果你只是临时停用插件进行调试,后续还需重新启用它并清空Redis缓存,以恢复网站性能。

如果停用Redis Object Cache插件后,发现仍然有缓存文件,我们到对应网站根目录文件夹wp-content,将里面的【object-cache.php】文件删除即可。


【AD】BandwagonHost:$92.30/年/2核/2G内存/40G SSD/1T流量/1Gbps/香港CMI/大阪软银/洛杉矶CN2 GIA

【AD】美国洛杉矶CN2 VPS/香港CN2 VPS/日本CN2 VPS推荐,延迟低、稳定性高、免费备份_搬瓦工vps