WordPress EXP
分享10年建站经验

使用 Memcached 内存缓存优化 WordPress 定时作业功能

在 WordPress 中可以定义定时作业,指定定时去执行,那么这些定时作业是存在在哪里呢,怎么运行的呢?接下来我们就讲讲如何使用 Memcached 内存缓存优化 WordPress 定时作业功能,使其降低写入从而降低整体资源占用。如果你还不清楚什么是 Memcached 内存缓存,那么建议你先阅读《使用 Memcached 内存缓存给 WordPress 网站提速并降低负载》。

WordPress定时作业介绍

WordPress 的定时作业存储在 options 表里面,它使用的是 cron 这个 option。

那么定时作业在每次执行过程中,WordPress 使用方法 get_option('cron') 获取当前的定时作业配置,然后更新当前作业的下次执行时间和参数等通过 update_option('cron', $value) 写回 option 表。

这样每次定时作业的执行,都会对 option 进行写操作,如果系统的定时作业多的话,option 表会不停的被刷新,这样会影响系统的效率,我们可以把定时作业的配置存到内存里面,通过内存缓存去优化这个定时作业的执行过程。

优化WordPress定时作业

接下来我们就使用 Memcached 内存缓存优化 WordPress 定时作业功能。

首先判断内存中是否有定时作业的配置,如有则使用内存中的配置:

add_filter('pre_option_cron', function($pre){
	$value	= get_transient('wpexp_crons');
	return $value ?: $pre;
});

每次更新定时作业配置,都先写入内存。那么什么时候,将定时作业的配置写回数据库呢?

我们在内存中设置一个标记,这个标记存活期1小时,当他失效的时候,我们就将定时作业的配置写回数据库的 option 表,所以每小时都会将定时作业的配置写回数据库:

add_filter('pre_update_option_cron', function($value, $old_value){
	if($value === $old_value || maybe_serialize($value) === maybe_serialize($old_value)){
		return $value;
	}

	set_transient('wpexp_crons', $value, HOUR_IN_SECONDS);

	if(get_transient('wpexp_cron_mark') === false){
		set_transient('wpexp_cron_mark', 1, HOUR_IN_SECONDS);
		return $value;
	}else{
		return $old_value;
	}
}, 10, 2);

赞(0) 打赏
转载请注明来源及链接:WPEXP » 使用 Memcached 内存缓存优化 WordPress 定时作业功能

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏