php中memcache读取数据批量写入mysql
用 Memcache 可以缓解 php和数据库压力下面代码是解决高负载下数据库写入瓶颈问题,遇到最实用的:写入ip pv uv的时候,用户达到每分钟几万访问量,要记录这些数据,实时写入数据库必定奔溃.
用以下技术就能解决,还有如用户注册,同一时间断内,大量用户注册,可以缓存后一次性写入到数据库,代码如下:
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 ; //开源代码phpfensi测试数据 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 文档.
查看更多关于php中memcache读取数据批量写入mysql - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did30511