Memcache php提高mysql负载有效方法
Memcache的理由:
1.Web Server(Lighttpd、Nginx据说都比Apache效率高好多,大家可以试用下)对CPU要求高,对内存要求低;而Memcached Server是对CPU要求低,对内存要求高,所以可以搭配使用。在对前端的Web Server上安装Memcached Server是可行的。
2.金钱金钱金钱,最少的付出,获得最大的收益。
3.简单简单简单,对于一个架构合理的系统来说,添加Memcache的支持可能只是一个批量处理文件的过程
Discuz!使用Memcache
1.在config.inc.php中增加
代码如下 | 复制代码 |
$memcachehost = '127.0.0.1'; $mem = new Memcache; function fetch_array($query, $result_type = MYSQL_ASSOC) { function query_memcache($sql, $type = '') { $key = md5($sql); function query($sql, $type = '') { $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ? if(substr($sql, 0, 6) == 'SELECT') { $this->querynum++; |
4.将需要使用Memcache缓存的SQL查询的代码由
$db->query(
修改为
代码如下 | 复制代码 |
$db->query_memcache( |
注意并将
代码如下 | 复制代码 |
while($post = $db->fetch_array($query)) { |
修改为
代码如下 | 复制代码 |
foreach($query as $post) { |
没有while的$db->fetch_array可以不用修改。
下面代码有用得着的就拿去:
preg_replace("/while([$](w+)s*=s*[$]db->fetch_array([$]query))/is", "foreach($query as $1)", $file);
回头放出个小工具批量替换下就可以了。
在EditPlus中可以这样替换:while([$](.*) = [$]db->fetch_array([$]query))替换为foreach($query as $)
文章链接:http://www.phprm.com/code/Memcache.html
随便收藏,请保留本文地址!