帝国CMS技术互助群:540946827 一帮大神带你装逼带你飞!还有漂亮的妹纸陪你玩哦!
帝国小说连载系统如何快速有效的将章节内容缓存至本地呢?
采集初期,为了速度,我们可以批量采集书籍入库,暂不进行内容入库,但是真正想运营起来,内容缓存至本地是必不可少的一步!
那么如何有效的进行缓存呢?
十几万本书,这个章节可是好几千万上亿章,数据量较为庞大,进程少了,速度慢,进程大了,服务器难以支撑。
这里我测试过多种办法,最开始是利用系统自身来进行处理,即通过插件的形式,批量进行请求,线程设置8以内,速度虽有明显提升,但是速度还是不够,如果设置为20个线程以上,速度能明显感觉提升。不过服务器资源不够,容易跑死。
因为线程,需要服务器去承担,缓存内容的时候还是需要服务器去处理。
所以,咱们换一个思维,把请求交给外部,我们服务器只做缓存处理,这样可以节省一大部分资源。
另外,这个请求可以分发给多个云平台,让他们定时去处理,我们只需要做好数据接口即可。
下面直接上代码:
require ('../class/connect.php');
require ('../class/db_sql.php');
require ('../class/functions.php');
require ('../class/t_functions.php');
$link = db_connect();
$empire = new mysqlquery();
$id=RepPostStr($_GET['id']);
$bookid=RepPostStr($_GET['bookid']);
$page=RepPostStr($_GET['page']);
$page=$page?$page:1;
$line=1000;
$start=($page-1)*$line;
$host=$public_r['add_domain'].'/e/action/getlocal.php';
if($id&&$bookid){
$r=$empire->fetch1("select id,islocal,bookid,newstext,urlfrom from {$dbtbpre}ecms_chapter where bookid='$bookid' and id='$id'");
$ret=GetChapterContents($r);
echo json_encode($ret);
}elseif($bookid){
$sql=$empire->query("select id from {$dbtbpre}ecms_chapter where bookid='{$bookid}' and islocal=0 order by pxid asc");
while($r=$empire->fetch($sql)){
$list.='{'.$host.'?bookid='.$bookid.'&id='.$r['id'].'},';
}
echo $list;
}else{
$sql=$empire->query("select id from {$dbtbpre}ecms_book order by id asc limit $start,$line");
while($r=$empire->fetch($sql)){
$list.='{'.$host.'?bookid='.$r['id'].'},';
}
echo $list;
}
db_close();
$empire = null;
?>
安装方法,将该文件放置于/e/action/目录下,命名为“getlocal.php”即可。
如何使用,请自我尝试。
本文系剖要网原创文章,转载请注明来源!
如对本文有疑问,请提交到交流社区,广大热心网友会为你解答!! 点击进入社区
打赏一下,我们会为大家提供更多优质资源!
您的打赏将全部用来搜集更多优质资源!
扫码打赏,你说多少就多少
打开微信扫一扫,即可进行扫码打赏哦