日期:2014-05-16  浏览次数:20825 次

Memcache mysql实例

中文api http://code.google.com/intl/zh-CN/appengine/docs/python/memcache/


Memcache::flush // 刷新所有Memcache上保存的项目(所有项目过期,类似于删除所有的保存的项目,但内存中有)
Memcache::pconnect // 打开一个到Memcache的长连接
Memcache::replace // 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
Memcache::set // 向Memcache添加一个值,如果已经存在,则覆写


下面是一些简单的用法实例,仅供参考

<?php
$mem = new Memcache;
$mem->connect("127.0.0.1", 12000);
//Memcache::set方法有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存 ,第四个参数可选,用来设置一个过期自动销毁的时间。
$mem->set('test','123',0,60);
//Memcache::add方法的作用和Memcache::set方法类似,区别是如果 Memcache::add方法的返回值为false,表示这个key已经存在,而Memcache::set方法则会直接覆写。
$mem->add('test','123',0,60);
//Memcache::get方法的作用是获取一个key值,Memcache::get方法有一个参数,表示key。
$mem->get('test');//输出为'123'
//Memcache::replace 方法的作用是对一个已有的key进行覆写操作,Memcache::replace方法有四个参数,作用和Memcache::set方法的相同。
$mem->replace('test','456',0,60);
//Memcache::delete方法的作用是删除一个key值,Memcache::delete方法有两个参数,第一个参数表示key,第二个参数可选,表示删除延迟的时间。
$mem->delete('test',60);
?>

使用情况一:统计? 可以通过对所有的key进行管理批量操作 http://hudeyong926.iteye.com/blog/1253791

?

<?php
//访问统计
$memcache = new Memcache ();
$memcache->connect ( 'localhost', 11211 ) or die ( "Could not connect" );
if ($s = $memcache->get ( 'a' )) {
	$s = $s + 1;
	$memcache->set ( 'a', $s );
} else {
	$memcache->set ( 'a', 1 );
}
echo '访问结果为:' . $s;
?>

?

$boolen_no_cached = (intval(date('H'))>=23||intval(date('H'))<=8); //不用memecache的时间段
$date = date('Y-m-d');
$eeyyid =trim($_GET['eeyyid']);

$listkey = md5($eeyyid);
if ($lists = $memcache->get($listkey)) {//memcache 缓存
	$list = unserialize ($lists);   
} else { //mysql   
	$list = $delegate->check_type_info($eeyyid);//得到数据库的值
	$memcache->set($listkey, serialize($list), MEMCACHE_COMPRESSED, 0);   
} 	
$key = md5($typeid.$date);
if(unserialize($lists)){
	$typeid = $list['typeid'];
	
	$type_hits =  $delegate->check_typehits_info($typeid, $date);
	if($type_hits){
		if($boolen_no_cached){
			if($views = $memcache->get($key)){ //一次性保存后删除memecache缓存
				$data_type = array('views'=>$views,'updatetime'=>$date);
				$delegate->update_typehits_info($data_type, $typeid);
				$memcache->delete($key);    
			}else{
				$data_type = array('views'=>'+=1','updatetime'=>$date);
				$delegate->update_typehits_info($data_type, $typeid);
			}
		}else{
			if ($views = $memcache->get($key)) {//memcache
				$views=$views+1;  
				$memcache->set($key, $views, MEMCACHE_COMPRESSED, 0);   
			} else { //mysql   
				$views = $type_hits['views']+1;//得到数据库的统计数
				$memcache->set($key, $views, MEMCACHE_COMPRESSED, 0);   
			} 			
		}
	}
}

? 其实我们可以用increment方法代替上面的做法

<?php
$memcache = new Memcache ();
$memcache->connect ( 'localhost', 11211 ) or die ( "Could not connect" );

if ($s = $memcache->increment ( 'a', 1 )) {
	echo $s;
} else {
	$memcache->set ( 'a', 1 );
}
?> 

数据压缩:

<?php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$test=(str_repeat('jetwong',100000));
$memcache->set('b',($test));
?>

?

使用压缩:

<?php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
$test=(str_repeat('jetwong',100000));
$memcache->set('b',($test),MEMCACHE_COMPRESSED);
?> 


4。Memcache内存的更新清理(delete f