Discuz!中增加memcache緩存的方法
來源:程序員人生 發布時間:2014-01-01 14:54:14 閱讀次數:2805次
很多站長都有體會,隨著壇子越來越大,鏈接超時的問題越來越嚴峻。
google后并嘗試用這里說的方法來做優化。但發現不夠。被緩存的帖子不會在修改或者刪除后自動清空緩存。當存在附件的帖子有權限和無權限的人看到的效果一致:要么都不能看到下載鏈接要么都能看到下載鏈接。
其實discuz最大的問題是帖子表cdb_threads。所以一般來說對這張表做了cache就會給論壇減輕很大的壓力。
筆者做了嘗試,效果還可以。所以把方法給大家看看。
先裝memcache:http://blog.csdn.net/luojianlong/archive/2008/05/05/2393271.aspx.這里就不做贅述了。
1.在config.inc.php中增加
$memcachehost = '127.0.0.1';
$memcacheport = 11211;
2.在include/common.inc.php中
$mem = new Memcache;
$mem->connect($memcachehost, $memcacheport);
3.在viewthread.php中
找到
$newpostanchor = $postcount = $ratelogpids = 0;
$onlineauthors = array();
在下面加上
// added by rubeljl for memcache the first page of viewthread 2009.6.8 start
$postlist = Array();
$bUpdateMem = false;
if( 1 == $page ){
$postlist = $mem->get( 'viewthread_' . $tid . '_1');
$bUpdateMem = empty( $postlist ) ? false : true;
}
$bHasAttachment = false;
if( !is_array( $postlist ) || empty( $postlist ) ){
// added by rubeljl for memcache the first page of viewthread 2009.6.8 end
找到:while($post = $db->fetch_array($query)) {
在下面增加:
if( $post['attachment'] ){
$bHasAttachment = true;
}
找到$postlist[$post['pid']] = viewthread_procpost($post);
在下面增加:
if( 1 == $page && false === $bHasAttachment ){
$mem->set( 'viewthread_' . $tid . '_1', $postlist, 0, 1000 );
}
}
4.在topicadmin.php中
找到$db->query("DELETE FROM {$tablepre}posts WHERE pid IN ($pids)");
下面添加:
$mem->delete( 'viewthread_' . $tid . '_1' );
找到:$db->query("DELETE FROM {$tablepre}myposts WHERE tid='$othertid'");
下面添加:
$mem->delete( 'viewthread_' . $tid . '_1' );
5.在include/newreply.inc.php中
找到$pid = $db->insert_id();
下面添加:$mem->delete( 'viewthread_' . $tid . '_1' );
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈