20
2023
08

PHPMPS缓存信息点击量,避免频繁更新数据库的方法

第一步:在global.fun.php文件中自定义两个函数

//缓存点击量
function cache_hits($module, $itemid) {
	if(@$fp = fopen(PHPMPS_CACHE.'/hits-'.$module.'.php', 'a')) {
		flock($fp, LOCK_EX);
		fwrite($fp, $itemid.' ');
		flock($fp, LOCK_UN);
		fclose($fp);
	}
}
//更新点击量
function update_hits($module, $table) {
	global $db;
	$hits = trim(file_get(PHPMPS_CACHE.'/hits-'.$module.'.php'));
	file_put(PHPMPS_CACHE.'/hits-'.$module.'.php', ' ');
	file_put(PHPMPS_CACHE.'/hits-'.$module.'.dat', time());
	if($hits) {
		$tmp = array_count_values(explode(' ', $hits));
		$arr = array();
		foreach($tmp as $k=>$v) {
			$arr[$v] .= $k ? ','.$k : '';
		}
		$id = $module == 'info' ? 'id' : 'comid';
		foreach($arr as $k=>$v) {
			$db->query("UPDATE LOW_PRIORITY {$table} SET `click`=`click`+".$k." WHERE `$id` IN (0".$v.")", 'UNBUFFERED');
		}
	}
}

第二步:在common.php文件中添加下面代码

$PHP_TIME = $PHPMPS_TIME = time(); //定义时间

define('SYS_WIN', strpos(strtoupper(PHP_OS), 'WIN') !== false ? true: false);//获取当前操作系统
define('PHPMPS_CACHE', PHPMPS_ROOT.'data/phpcache');  //定义缓存路径
define('P_CHMOD', ($CFG['file_mod'] && !SYS_WIN) ? $CFG['file_mod'] : 0);//文件目录权限修改

第三步:在数据库phpmps_config表里添加一个字段 cache_hits 然后在后台系统配置模板里加上这个参数,用来设置缓存时间。(以秒为单位


第四步:把view.php文件中原来更新点击量的代码

$db->query("UPDATE {$table}info SET click=click+1 WHERE id='$id'");

换成下面的代码

//点击量缓存
if($CFG['cache_hits']) {
	 cache_hits('info', $id);
} else {
	$db->query("UPDATE LOW_PRIORITY {$table}info SET click=click+1 WHERE id='$id'");
}

第五步:在category.php文件中添加下面代码

//更新点击量缓存
if($CFG['cache_hits']) {
	$file = PHPMPS_CACHE.'/hits-info';
	if($PHPMPS_TIME - @filemtime($file.'.dat') > $CFG['cache_hits'] || @filesize($file.'.php') > 102400) update_hits('info', $table.'info');
}

搞完后在后台系统设置里设置好缓存时间,这样信息点击量会被先缓存到hits-info.php缓存文件里然后按照设置好的缓存时间再更新到数据库,有效缓解数据库的压力!

同理商家页点击量也可以这么设置,将第四步 cache_hits('info', $id); 改成 cache_hits('com', $comid);

« 上一篇下一篇 »

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。