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

2023-04-14 08:55:01 浏览数 (1)

在 WordPress 中可以定义定时作业,指定定时去执行,那么这些定时作业是存在在哪里呢,怎么运行的呢?

WordPress 定时作业的存储过程

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

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

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

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

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

代码语言:javascript复制
add_filter('pre_option_cron', function($pre){
	$value	= get_transient('wpjam_crons');
	return $value ?: $pre;
});

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

代码语言:javascript复制
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('wpjam_crons', $value, HOUR_IN_SECONDS);

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

WPJAM Basic 插件已经集成了 Memcached,下载 WPJAM Basic 之后,将 wpjam-basic/template/ 目录下的 object-cache.php 文件复制到 wp-content 目录下即可。

0 人点赞