memcache使用实例|PHP

首先,判断memcache中是否存在key,如果有则从memcache中取值;如果没有相应的key,则从去网页中抓取数据,如果抓取成功,则存入db,写入memcache并读取,如果抓取不成功,则直接mysql中取值,并将取出来的值放入memcache。

<?php
include('inc/common.inc.php');

if (! isset($city) || ! is_array($city) ) {
	exit;
}

//print_r ($city);exit;

$mem = new Memcache();
$mem-> connect('localhost', '11211');
$expires=15*60;

//check if cache exits
if(($value = $mem-> get($city)) != FALSE) {
	echo "get key from memcache: "."<br />";
	// 	$return=$mem->get($city);
	// 	echo json_encode($return);
}//if
else {
	$resultJson=fetch_data();
	echo count($resultJson)."<br />";
	if(count($resultJson)==1 || empty($resultJson)){
		//从mysql中取值
		echo "get key from mysql:"."<br />";
		$query="select * from pm25";
		$result=mysql_query ($query) ;
		while ($row = mysql_fetch_assoc($result)){
			$rows[]=$row;
		}
		//将获取的值数组存入memcache
		for($i=0;$i<count($rows);$i++){
			$k[$i]=$rows[$i]['city'];
			$v[$i]['city']=$rows[$i]['city'];
			$v[$i]['pm25']=$rows[$i]['pm25'];
			$mem -> set($k[$i], $v[$i], false, $expires);
		}
		// 		$return=$mem->get($city);
		// 		echo json_encode($return);
	}//if
	else{
		echo "get key from new_writed mysql:"."<br />";
		write_db($resultJson);
		$query="select * from pm25";
		$result=mysql_query ($query) ;
		while ($row = mysql_fetch_assoc($result)){
			$rows[]=$row;
		}
		//write memcache
		for($i=0;$i<count($rows);$i++){
			$k[$i]=$rows[$i]['city'];
			$v[$i]['city']=$rows[$i]['city'];
			$v[$i]['pm25']=$rows[$i]['pm25'];
			$mem -> set($k[$i], $v[$i], false, $expires);
		}
		// 		$return=$mem->get($city);
		// 		echo json_encode($return);
	}//else

}//else

foreach ($city as $k=>$v){
	$return[$k]=$mem->get($v);
}
echo json_encode($return);

function fetch_data() {
	$url="http://www.example.com";
	//$url="";	
	$data = http_get($url);
	$getJson = json_decode($data, true);
	return $getJson;
} //func fetch_data

function write_db($getJson){
	$sql="DELETE FROM pm25";
	mysql_query($sql);
	//sort the json.txt
	foreach ($getJson as $key => $row) {
		$area[$key] = $row['area'];
		$pm2_5[$key]= $row['pm2_5'];
	}
	array_multisort($area, SORT_ASC,$pm2_5,SORT_ASC,$getJson);
	for($i=0;$i<count($getJson)-1;$i++){
		if($getJson[$i]['pm2_5']==0)
			$count=0;
		else
			$count=1;
		$sum=$getJson[$i]['pm2_5'];
		for($j=$i+1;$j<count($getJson);$j++,$i++){
			if(strcmp($getJson[$j]['area'],$getJson[$i]['area'])==0 ){
				if($getJson[$j]['pm2_5']==0 ){
					continue;
				}
				else{
					$count++;
					$sum+=$getJson[$j]['pm2_5'];
					$pm2_5=$sum/$count;
				}
			}
			else{
				//insert into mysql
				$result['city']=$getJson[$i]['area'];
				$result['pm25']=intval($pm2_5);
				$query="insert into pm25(city,pm25) values ('".$result['city']."',".$result['pm25'].")";
				mysql_query($query);
				break;
			}
		}
	}
	return $getJson;
}//func write_db


$mem -> close();
?>



高管动态:Stkcd [证券代码] - 以交易所公布的证券代码为准。Reptdt [统计截止日期] - 以YYYY-MM-DD列示,部分缺少在相应位置上以00表示,如1993年12月某日表示为1993-12-00。基本情况统计的截止日期D0101b [姓名] - 上市公司董事、监事、高级管理人员的姓名。D0201a [职务类别] - 10位编码。一至二位标识董事会监事会任职情况,10=董事(常务、代理等),11=董事长(副),12=独立董事,13=董事局主席(副),14=其他;20=监事(副),21=监事会主席(副),22=职工监事,23=其他三至六位表示高级管理层任职情况,30=总经理(副),31=经理(副),32=总裁(副),33=董秘,34=负责人,35=主管(副),36=顾问,37=CEO,38=总监,39=其他;七至八位表示企业任职情况,40=部长(副),41=局长(副),42=处长(副),43=主任(副),44=书记(副),45=工会主席(副),46=其他;最后两位表示具体管理方向,A=财务,B=工程,C=技术,D=信息,E=法律,F=人力资源,G=市场,H=运营,I=行政,J=投资,K=生产,L=质量,M=其他,N=无具体管理方向空位用“0”表示例如:董事、副总经理、总会计师、董事会秘书表示为10303300AND0201b [具体职务] - 具体职位名称。D0301b [性别] - D0401b [年龄] - -9666=未披露。D0501b [教育背景] - 1=中专及中专以下,2=大专,3=本科,4=硕士研究生,5=博士研究生,6=其他(以其他形式公布的学历,具体见该记录的备注)。D0601b [职称] - 未披露用N/A表示D0701b [现职任职开始日期] - 以YYYY-MM-DD列示,部分缺少在相应位置上以00表示,如1993年12月某日表示为1993-12-00。D0702b [现职任职结束日期] - 以YYYY-MM-DD列示,部分缺少在相应位置上以00表示,如1993年12月某日表示为1993-12-00。D0801c [高管个人简历] - D1301b [备注] - 特殊情况备份。D0901b [是否领取薪酬] - 是否在上市公司领取薪酬(如果在上市公司只领取津贴,则视为2处理)1=在上市公司领取薪酬,2=未在上市公司领取薪酬。D1001b [报告期报酬总额] - 未披露用-9666表示D1002b [其中:津贴] - 未披露用-9666表示D1101b [年末持股数] - 未披露用-9666表示D1201b [其他单位兼任标识] - 是否在除上市公司外的其他单位有兼任职务。1=有兼任,2=无兼任。当该字段等于1时,表十有意义。此字段从2005年开始,以前年度无意义用0表示。股东持股:Stkcd [证券代码] - 以交易所公布的证券代码为准。Reptdt [统计截止日期] - 以YYYY-MM-DD列示,部分缺少在相应位置上以00表示,如1993年12月某日表示为1993-12-00。基本情况统计的截止日期S0101b [股东名称] - 上市公司所披露的股东名称。S0201b [持股数量] - 未披露用-9666表示S0301b [持股比例(%)] - 未披露用-9666表示S0401b [股份性质] - 未披露用N/A表示S0601b [备注] - 为2001年数据更新时新增字段S0501b [持股排名] - 该股东在10大股东内排名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值