Memcached - PHP 安装&使用

下载Memcached:
http://danga.com/memcached/download.bml

安装:
下载安装libevent,已安装可跳过:
下载地址:http://www.monkey.org/~provos/libevent/

Memcached For PHP Module下载地址:
http://pecl.php.net/package/memcache
http://cn.php.net/manual/zh/ref.memcache.php

安装Memcached服务端

root@tonyvicky:# tar vxzf memcached-1.1.12.tar.gz
root@tonyvicky:# cd memcached-1.1.12
root@tonyvicky:# ./configure --prefix=/usr/local/memcached
root@tonyvicky:# make
root@tonyvicky:# make install

安装完毕重启服务:

root@tonyvicky:# cd /usr/local/memcached/bin
root@tonyvicky:# ./memcached -d -m 50 -p 11211 -u root



安装PHP模块

root@tonyvicky:# tar vxzf memcache-1.5.tgz
root@tonyvicky:# cd memcache-1.5
root@tonyvicky:# /usr/local/php/bin/phpize
root@tonyvicky:# ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir
root@tonyvicky:# make
root@tonyvicky:# make install

安装完后可能会有如下提示:

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20050922/

修改php.ini

extension_dir = "./"

修改为:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20050922/"

添加一行:

extension=memcache.so


安装完毕,测试:

PHP代码

<?php 

  $memcache  =  new  Memcache;  //创建一个memcache对象  

  $memcache ->connect( 'localhost' , 11211)  or   die  ( "Could not connect" );  //连接Memcached服务器

  $memcache ->set( 'key' 'test' );  //设置一个变量到内存中,名称是key 值是test  

  $get_value  =  $memcache ->get( 'key' );  //从内存中取出key的值   

  echo   $get_value

?>

Memcache的内定Function
connect(ip, port)
set(key, value)  数据压缩:set(key, value, MEMCACHE_COMPRESSED )
get(key)
increment , 同set(好像多了个计数功能,没试过)
getStats() 返回当前内存占用情况(return array) print_r($memcached->getStats());
flush  清空内存占用.

代码范例(来自chinaunix):

PHP代码

<?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 ;  

?> 

等效PHP代码

<?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代码

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

?>  

内存的更新清理PHP代码

<?php

  $memcache  =  new  Memcache; 

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

  /*设置值*/

  $status  =  $memcache ->getStats();  

echo  ’设置前内存使用情况’. $status [’bytes’].’<br>’; 

echo  ’设置后’;   for ( $i =0; $i <9; $i ++) {       

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

       echo  ’<br>’. $i .’->’. $memcache ->get(’b’. $i );

}

  /*查看设置的值*/   

$status  =  $memcache ->getStats();

  echo  ’ delete 前内存使用情况’. $status [’bytes’].’<br>’;  

echo  ’<br>开始 delete ’;  

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

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

    echo  ’<br>’. $i .’->’. $memcache ->get(’b’. $i );  

}  

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

$status  =  $memcache ->getStats();  

echo  ’使用 flush 前内存使用情况’. $status [’bytes’].’<br>’;  

echo  ’使用 flush 情况:’; 

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

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

   echo  ’<br>’. $i .’->’. $memcache ->get(’b’. $i );    

}  

$memcache -> flush (); 

echo  ’ flush 之后:’; 

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

  echo  ’<br>’. $i .’->’. $memcache ->get(’b’. $i );

}  

$status  =  $memcache ->getStats(); 

echo  ’ flush 后内存使用情况’. $status [’bytes’].’<br>’;  

?> 

内存超量测试PHP代码

<?php  

$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 .’->设置成功<br>’;  

          $status  =  $memcache ->getStats();

           echo  ’内存:’. $status [’bytes’].’<br>’;

   } else  {

           echo   $j .’->设置失败<br>’;

           }

 

?>

总结 PHP代码

<?

  //设置篇

  if ( $data  =  $memcache ->get(’k’, $v )) {      

   //显示我们的数据       

}   else  { 

    $data  = get_from_database;  //得到数据源      

    if (! $memcache ->set(’k’, $data ), MEMCACHE_COMPRESSED)  //开始设置     

    log();    //不成功,记录失败信息       

}

?> 

你可能感兴趣的:(DB,memcached)