欢迎光临景诺科技软件开发淘宝店

进店请收藏,谢谢

从memcache读取数据批量写入数据库

利用 Memcache 可以缓解 php和数据库压力

下面代码是解决高负载下数据库写入瓶颈问题。

遇到最实用的:写入ip pv uv的时候 ,用户达到每分钟几万访问量,要记录这些数据,实时写入数据库必定奔溃。(http://shanmao.me/webback/guang-gao-xi-tong-v2

用以下技术就能解决。

还有如用户注册,同一时间断内,大量用户注册。可以缓存后一次性写入到数据库。

代码如下:

public function cldata(){
$memcache_obj = new Memcache;
	$memcache_obj->connect('127.0.0.1', '11211');
	$all_items = $memcache_obj->getExtendedStats('items');
	foreach($all_items as $option=>$vall){
		if (isset($all_items[$option]['items'])) {
                 $items = $all_items[$option]['items'];
                 foreach ($items as $number => $item) {
                       $str    = $memcache_obj->getExtendedStats('cachedump', $number, 0);
                       $line   = $str[$option];
if(is_array($line) && count($line) > 0){
	foreach($line as $key => $value) {
		$keys[] = $key;
}
}
}
}
}

	dump(count($keys));//获取到key
	if(count($keys)>50){//要写入的数据条数		
		$end=50;
	}else{
		$end=count($keys);
	}
	
	for($i=0;$i<=$end;$i++){	
		if(!strstr($keys[$i],'datadb')) continue;		
		$ksv = str_replace('datadb','',$keys[$i]);
		
	/*$logdata = unserialize(S('login'.$ksv));//登录写入
	if(is_array($logdata)){
		$this->addsuidinlogin($logdata[0],$logdata[1],$logdata[2],1);		
	}	*/
		
		/*$sdata = unserialize(S('regadd'.$ksv));//注册写入	
	if(is_array($sdata)){
		$this->baiduad($sdata[0],$sdata[1],$sdata[2],$sdata[3],$sdata[4],1);		
	}
	*/
		$regdata = unserialize(S('datadb'.$ksv));		
		$ress[]=$regdata;
		S('datadb'.$ksv,null);
		
		
	}	
	$addb = M()->db(66,C('DB_WEB_AD'));//批量写入 addall	
	$addb->table('mj_ad_count')->addall($ress);
	echo M()->getLastSql();

	
	
	
}

附:
可以使用的工具如:memadmin 还有memadmin 文档。

更多

本文固定链接: http://shanmao.me/webback/sql/cong-memcache-du-qu-shu-ju-pi-liang-xie-ru-shu-ju-ku | 山猫的博客

该日志由 admin 于2014年03月21日发表在 php, sql 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 从memcache读取数据批量写入数据库 | 山猫的博客