mysql应用memcache,Memcache mysql范例

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添加一个值,如果已经存在,则覆写

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

$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

//访问统计

$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方法代替上面的做法

$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 );

}

?>

数据压缩:

$memcache = new Memcache;

$memcache->connect('localhost', 11211) or die ("Could not connect");

$test=(str_repeat('jetwong',100000));

$memcache->set('b',($test));

?>

使用压缩:

$memcache = new Memcache;

$memcache->connect('localhost', 11211) or die ("Could not connect");

$test=(str_repeat('jetwong',100000));

$memcache->set('b',($test),MEMCACHE_COMPRESSED);

?>

1513232021.jpg

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

$memcache = new Memcache;

$memcache->connect('localhost', 11211) or die ("Could not connect");

/*设置值*/

$status = $memcache->getStats();

echo '设置前内存使用情况'.$status['bytes'].'
';

echo '设置后';

for($i=0;$i<9;$i++) {

$memcache->set('b'.$i,rand(1,99));

echo '
'.$i.'->'.$memcache->get('b'.$i);

}

/*查看设置的值*/

$status = $memcache->getStats();

echo 'delete前内存使用情况'.$status['bytes'].'
';

echo '
开始delete';

for($i=0;$i<9;$i++) {

$memcache->delete('b'.$i);

echo '
'.$i.'->'.$memcache->get('b'.$i);

}

/*查看flush使用的情况*/

$status = $memcache->getStats();

echo '使用flush前内存使用情况'.$status['bytes'].'
';

echo '使用flush情况:';

for($i=0;$i<9;$i++) {

$memcache->set('b'.$i,rand(1,99));

echo '
'.$i.'->'.$memcache->get('b'.$i);

}

$memcache->flush();

echo 'flush之后:';

for($i=0;$i<9;$i++) {

echo '
'.$i.'->'.$memcache->get('b'.$i);

}

$status = $memcache->getStats();

echo 'flush后内存使用情况'.$status['bytes'].'
';

?>

5。内存超量的测试(set) 我们把内存设为2M

./memcached -d -m 2 -p 11211 -u root

$memcache = new Memcache;

$memcache->connect('localhost', 11211) or die ("Could not connect");

//600K左右

$test1= str_repeat('jetlee',100000);

//600K左右

$test2= str_repeat('jetlee',100000);

//600K左右

$test3= str_repeat('李连杰',200000);

//600K左右

$test4= str_repeat('连杰李',100000);

//200K

$test5= file_get_contents('http://img.pconline.com.cn/images/photoblog/2988177/20068/4/1154688770042_mthumb.JPG');

$test6= file_get_contents('http://img.pconline.com.cn/images/photoblog/1767557/20069/28/1159417108902_mthumb.jpg');

for($i=1;$i<=6;$i++) {

$j='test'.$i;

if($memcache->set($j,$$j)) {

echo $j.'->设置成功
';

$status = $memcache->getStats();

echo '内存:'.$status['bytes'].'
';

}

else {

echo $j.'->设置失败
';

}

}

?>

执行结果:

test1->设置成功

内存:600042

test2->设置成功

内存:1200084

test3->设置失败

test4->设置成功

内存:1200084

test5->设置失败

test6->设置失败

刚好印证我们的计算,不过20万的repeat为什么会失败,不是太了解,,,,,,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值