请教大大门,一个查询语句如何通过memcached优化查询方法?

飞鱼Love 发布于 2011/08/26 22:14
阅读 903
收藏 0

我的程序是dedecms5.7的,现在网站流量很大,但我要在页面中调用点击数,可我一加上这功能就逛吃cpu一直到100%,希望各位有空余时间帮我看下如何通过memcached优化下面的这个语句:

if(isset($aid)) $arcID = $aid;

$arcID = $aid = empty($arcID)? 0 : intval(preg_replace("/[^\d]/",'', $arcID));

$maintable = '#@__archives';$idtype='id';
if($aid==0) exit();


if(!empty($maintable))
{
    $dsql->ExecuteNoneQuery(" UPDATE `{$maintable}` SET click=click+1 WHERE {$idtype}='$aid' ");
}

if(!empty($view))
{
    $row = $dsql->GetOne(" SELECT click FROM `{$maintable}` WHERE {$idtype}='$aid' ");
    if(is_array($row))
    {
        echo "document.write('".$row['click']."');\r\n";
    }
}
加载中
0
mark35
mark35

点击的记录及展示需要先后操作点击表,并发大了DB压力非常大,这是memcached帮不上忙的。如果是MyISAM引擎那就更无解了,$maintable一锁表整个代码流水都得停下来排队等候。

除非升级硬件,加CPU,加磁盘阵列(RAID0+)或者SSD。

0
飞鱼Love
飞鱼Love
谢谢mark35的回复,让我又理解了一部分
0
ShaoJiahao
ShaoJiahao
其实点击数这些没有必要实时更新的,隔几分钟再去压一次数据库不行吗?
0
ShaoJiahao
ShaoJiahao
完全可以先在cache中incr这个数值一段时间再update db。
0
jobell
jobell
这个用 Redis非常合适
0
飞鱼Love
飞鱼Love
楼上各位说的有理,我回去试下
返回顶部
顶部