Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7656657
  • 博文数量: 1770
  • 博客积分: 18684
  • 博客等级: 上将
  • 技术积分: 16357
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-02 10:28
个人简介

啥也没写

文章分类

全部博文(1770)

文章存档

2024年(15)

2023年(44)

2022年(39)

2021年(46)

2020年(43)

2019年(27)

2018年(44)

2017年(50)

2016年(47)

2015年(15)

2014年(21)

2013年(43)

2012年(143)

2011年(228)

2010年(263)

2009年(384)

2008年(246)

2007年(30)

2006年(38)

2005年(2)

2004年(1)

分类: LINUX

2009-07-22 14:41:23

这几天在想如何提高论坛的性能,从mysql数据库的优化上已经提高不了多少了,而且又不能增加更多的服务器,因为nginx占用内存相对比较小,所以考虑到使用mem缓存来降低数据库的压力
至于memcached的安装就略过了,网上很多教程。
先启动memcached:
/usr/local/bin/memcached -d -m 1024 -u root -l 192.168.1.100 -p 12000
然后开始修改程序:
a) config.inc.php
增加:
$memcachehost = ‘192.168.1.100′;
$memcacheport = 12000;
$memcachelife = 5; // 不宜太大,否则用户体验不是很好
b) include/common.inc.php
增加:
$mem = new Memcache;
$mem->connect($memcachehost, $memcacheport);
c) include/db_mysql.class.php
增加:
function mem_query($sql, $type = ”) {
global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes, $mem, $memcachelife;
$key = md5($sql);
if(!($query = $mem->get($key))) {
echo ‘’;
$query = $this->query($sql, $type);
while($item  = $this->fetch_array($query)) {
$res[] = $item;
}
$query = $res;
$mem->set($key, $query , 0, $memcachelife);
}
$this->querynum++;
return $query;
}
function mem_fetch_array($query, $result_type = MYSQL_ASSOC) {
return is_resource($query) ? mysql_fetch_array($query, $result_type) : $query;
}
d) forumdisplay.php
假设我们只针对读版页使用memcache缓存,需要做如下修改:
113行
$query = $db->query($sql);
while($sub = $db->fetch_array($query)) {
=>
$query = $db->mem_query($sql);
foreach($query as $sub) {
213行
$query = $db->query(”SELECT uid, groupid, username, invisible, lastactivity, action FROM {$tablepre}sessions WHERE $guestwhere fid=’$fid’ AND invisible=’0′”);
if($db->num_rows($query)) {

while($online = $db->fetch_array($query)) {
=>
$query = $db->mem_query(”SELECT uid, groupid, username, invisible, lastactivity, action FROM {$tablepre}sessions WHERE $guestwhere fid=’$fid’ AND invisible=’0′”);
if(count($query) > 0) {

foreach($query as $online) {
216行
while($online = $db->fetch_array($query)) {
=>
foreach($query as $online) {
260-190行
把 $db->query 改成 $db->mem_query
295行
while(($querysticky && $thread = $db->fetch_array($querysticky)) || ($query && $thread = $db->fetch_array($query)) || ($queryfloat && $thread = $db->fetch_array($queryfloat))) {
=>
$mem_info = $mem_info_s = $mem_info_q = $mem_info_f = array();
if($querysticky) {
$mem_info_s = $db->mem_fetch_array($querysticky);
}
if($query) {
$mem_info_q = $db->mem_fetch_array($query);
}
if($queryfloat) {
$mem_info_f = $db->mem_fetch_array($queryfloat);
}
$mem_info = array_merge($mem_info_s, $mem_info_q, $mem_info_f);
foreach($mem_info as $thread) {
好了,修改完毕。
以读版页每页50个主题为例,每页数据大概在30K左右,如果有100万个主贴,那么只要600M内存就够了
现在我们只是简单的把读版页的主要数据放在了缓存中,如果需要存放其他的数据,请继续完善程序,有兴趣的可以找我(),很高兴和大家一起沟通
阅读(843) | 评论(0) | 转发(0) |
0

上一篇:KVM HOWTO

下一篇:/dev/null 2>&1

给主人留下些什么吧!~~