我们针对超级区块WordPress主题系列编写了详细的操作文档,并且录制有视频教程,有不明白的地方也可以在线咨询客服

展开产品分类

woocommerce的属性多重筛选查询缓存,避免CPU消耗过大

WordPress区块主题教程 58

woocommerce的属性多重筛选造成的CPU消耗过大问题

使用过woocommerce的多重筛选的朋友,会很经常遇到属性的多重筛选被蜘蛛或者其他机器人大量访问造成CPU消耗过高,从而导致服务器负载变高,网站访问慢、或者直接无法访问的情况。

造成这个问题的原因是,woocommerce的多重筛选是动态链接查询,当我们使用静态缓存加速的时候,动态链接是无法被静态化的,因此每一次访问都会查询数据库,蜘蛛或者机器人的大量爬取就会造成CPU的持续升高。

我们如果使用持久化内存缓存,如Redis/Memcached,如果没有针对性的进行缓存储存,那么也会造成这个问题。

因此我们针对这一问题,开发了woocommerce的多重筛选缓存功能,这一功能是合并到我们的超级区块WordPress主题-商城版中,进入主题选项可以看到选项说明和开关。

woocommerce的属性多重筛选查询缓存功能介绍

升级到最新版本的超级区块WordPress主题-商城版,进入主题选项你可以看到缓存的说明和设置:

woocommerce的属性多重筛选查询缓存,避免CPU消耗过大(images 1)

此处的缓存针对的位置是缓存查询链接,以及排序查询链接,其余可以静态化的内容则不会被缓存,这样极大的提高我们的缓存效率,而不会重复缓存浪费资源。

缓存分为两种:

对象缓存 (Object Cache)

使用服务器的内存存储缓存,几乎不会产生数据库查询,读取速度达到微秒级,可大大减轻服务器的压力,对象缓存需要服务器配置Redis/Memcached持久化内存缓存拓展才可以使用,在功能列表中,程序会自动检测你的服务器是否支持,而显示缓存类型,使用此缓存时,可以在宝塔界面设置自动释放内存,这样缓存会在自动释放内存时自动清理。

  • 优势:极高性能,适合高流量网站
  • 要求:服务器需要安装Redis或Memcached扩展
  • 内存建议:至少1GB,推荐2GB以上服务器使用
  • 注意:重启服务器会丢失缓存(自动释放内存,也会自动清理缓存)

临时缓存 (Transient)

如果你使用的服务器,或者是虚拟主机无法配置Redis/Memcached持久化内存缓存拓展,我们页提供了数据库存储缓存,未缓存时,一个页面读取查询数据库可能多达几十次,缓存后只读取一次数据库数据,这样也可以大大降低查询的负载,但是临时缓存的缓存数量需要被限制,否则会造成数据库临时数据过大的问题,临时数据程序会在24小时自动清理一次。

  • 优势:无需额外配置,简单易用
  • 注意:设置过大的缓存数量会导致数据库膨胀
  • 建议:默认限制数量为100,确保数据库稳定
  • 性能提升:对于服务器配置Redis/Memcached持久化内存缓存

 

总体来说,如果你的服务器能够配置Redis/Memcached持久化内存,那么最佳方案还是使用对象缓存的方法,这种方法仅会消耗一点内存,读取速度快,对服务器的资源消耗极小,配置后,多重筛选查询速度会变得和静态页面一样快,这是最佳的方案;

如果你使用的是虚拟主机,或者服务器无法配置持久化缓存,那么临时缓存也可以作为一种适当的补充手段,防止你的网站因为数据的查询过大造成的网站慢和停止。

其他功能

除了2种缓存之外,我们还提供了查询防护,如果多重筛选的参数过大,就会判断这是非法的请求,会直接终止查询,因为很多恶意机器人会通过较长的查询进行攻击,这些查询都不是正常的属性参数查询,因此直接终止会拦截大量非法的访问。

如果你没有使用多重筛选的功能,但如果有人直接模拟查询访问链接,woocommerce还是会对数据库进行查询从而无效消耗,因此这个版本的功能也提供了直接禁止多重筛选查询的功能,勾选后,会在查询开始拦截,从源头堵死资源消耗的问题。