第一步:在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);
评论列表: