·¢²©ÎÄ
¸öÈË×ÊÁÏ
  • ²©¿Í·ÃÎÊ£º453200
  • ²©ÎÄÊýÁ¿£º171
  • ²©¿Í»ý·Ö£º10010
  • ²©¿ÍµÈ¼¶£ºÉϽ«
  • ×¢²áʱ¼ä£º2004-12-27 09:45:50
¶©ÔÄÎҵIJ©¿Í
  • ¶©ÔÄ
  • ¶©Ôĵ½Ïʹû
  • ¶©Ôĵ½×¥Ïº
  • ¶©Ôĵ½Google
×ÖÌå´óС£º´ó ÖРС²©ÎÄ
PHPÏÂÓ¦ÓÃMemcached (2007-07-25 16:49)
·ÖÀࣺ Memcached

2007-06-23 23:34

http://nio.infor96.com/php-memcached/

ФÀí´ï (KrazyNio AT hotmail.com), 2006.04. 06, ×ªÔØÇë×¢Ã÷³ö´¦

Ò»¡¢memcached ¼ò½é

ÔںܶೡºÏ£¬ÎÒÃǶ¼»áÌýµ½ memcached Õâ¸öÃû×Ö£¬µ«ºÜ¶àͬѧֻÊÇÌý¹ý£¬²¢Ã»ÓÐÓùý»òʵ¼ÊÁ˽â¹ý£¬Ö»ÖªµÀËüÊÇÒ»¸öºÜ²»´íµÄ¶«¶«¡£ÕâÀï¼òµ¥½éÉÜһϣ¬memcached ÊǸßЧ¡¢¿ìËٵķֲ¼Ê½ÄÚ´æ¶ÔÏ󻺴æÏµÍ³£¬Ö÷ÒªÓÃÓÚ¼ÓËÙ WEB ¶¯Ì¬Ó¦ÓóÌÐò¡£

¶þ¡¢memcached °²×°

Ê×ÏÈÊÇÏÂÔØ memcached ÁË£¬Ä¿Ç°×îа汾ÊÇ 1.1.12£¬Ö±½Ó´Ó¹Ù·½ÍøÕ¾¼´¿ÉÏÂÔØµ½ memcached-1.1.12.tar.gz¡£³ý´ËÖ®Í⣬memcached Óõ½ÁË libevent£¬ÎÒÏÂÔØµÄÊÇ libevent-1.1a.tar.gz¡£

½ÓÏÂÀ´ÊǷֱ𽫠libevent-1.1a.tar.gz ºÍ memcached-1.1.12.tar.gz ½â¿ª°ü¡¢±àÒë¡¢°²×°£º

# tar -xzf libevent-1.1a.tar.gz# cd libevent-1.1a# ./configure --prefix=/usr# make# make install# cd ..# tar -xzf memcached-1.1.12.tar.gz# cd memcached-1.1.12# ./configure --prefix=/usr# make# make install

°²×°Íê³ÉÖ®ºó£¬memcached Ó¦¸ÃÔÚ /usr/bin/memcached¡£

Èý¡¢ÔËÐÐ memcached ÊØ»¤³ÌÐò

ÔËÐÐ memcached ÊØ»¤³ÌÐòºÜ¼òµ¥£¬Ö»ÐèÒ»¸öÃüÁîÐм´¿É£¬²»ÐèÒªÐÞ¸ÄÈκÎÅäÖÃÎļþ£¨Ò²Ã»ÓÐÅäÖÃÎļþ¸øÄãÐÞ¸Ä :) £©£º

/usr/bin/memcached -d -m 128 -l 192.168.1.1 -p 11211 -u httpd

²ÎÊý½âÊÍ£º

-d ÒÔÊØ»¤³ÌÐò£¨daemon£©·½Ê½ÔËÐÐ memcached£»-m ÉèÖà memcached ¿ÉÒÔʹÓõÄÄÚ´æ´óС£¬µ¥Î»Îª M£»-l ÉèÖüàÌýµÄ IP µØÖ·£¬Èç¹ûÊDZ¾»úµÄ»°£¬Í¨³£¿ÉÒÔ²»ÉèÖô˲ÎÊý£»-p ÉèÖüàÌýµÄ¶Ë¿Ú£¬Ä¬ÈÏΪ 11211£¬ËùÒÔÒ²¿ÉÒÔ²»ÉèÖô˲ÎÊý£»-u Ö¸¶¨Óû§£¬Èç¹ûµ±Ç°Îª root µÄ»°£¬ÐèҪʹÓô˲ÎÊýÖ¸¶¨Óû§¡£

µ±È»£¬»¹ÓÐÆäËü²ÎÊý¿ÉÒÔÓã¬man memcached һϾͿÉÒÔ¿´µ½ÁË¡£

ËÄ¡¢memcached µÄ¹¤×÷Ô­Àí

Ê× ÏÈ memcached ÊÇÒÔÊØ»¤³ÌÐò·½Ê½ÔËÐÐÓÚÒ»¸ö»ò¶à¸ö·þÎñÆ÷ÖУ¬ËæÊ±½ÓÊܿͻ§¶ËµÄÁ¬½Ó²Ù×÷£¬¿Í»§¶Ë¿ÉÒÔÓɸ÷ÖÖÓïÑÔ±àд£¬Ä¿Ç°ÒÑÖªµÄ¿Í»§¶Ë API °üÀ¨ Perl/PHP/Python/Ruby/Java/C#/C µÈµÈ¡£PHP µÈ¿Í»§¶ËÔÚÓë memcached ·þÎñ½¨Á¢Á¬½ÓÖ®ºó£¬½ÓÏÂÀ´µÄÊÂÇé¾ÍÊÇ´æÈ¡¶ÔÏóÁË£¬Ã¿¸ö±»´æÈ¡µÄ¶ÔÏó¶¼ÓÐÒ»¸öΨһµÄ±êʶ·û key£¬´æÈ¡²Ù×÷¾ùͨ¹ýÕâ¸ö key ½øÐУ¬±£´æµ½ memcached ÖеĶÔÏóʵ¼ÊÉÏÊÇ·ÅÖÃÄÚ´æÖе쬲¢²»ÊDZ£´æÔÚ cache ÎļþÖеģ¬ÕâÒ²ÊÇΪʲô memcached Äܹ»Èç´Ë¸ßЧ¿ìËÙµÄÔ­Òò¡£×¢Ò⣬ÕâЩ¶ÔÏó²¢²»Êdz־õ쬷þÎñÍ£Ö¹Ö®ºó£¬Àï±ßµÄÊý¾Ý¾Í»á¶ªÊ§¡£

image001.png

Èý¡¢PHP ÈçºÎ×÷Ϊ memcached ¿Í»§¶Ë

ÓÐÁ½ÖÖ·½·¨¿ÉÒÔʹ PHP ×÷Ϊ memcached ¿Í»§¶Ë£¬µ÷Óà memcached µÄ·þÎñ½øÐжÔÏó´æÈ¡²Ù×÷¡£

µÚÒ»ÖÖ£¬PHP ÓÐÒ»¸ö½Ð×ö memcache µÄÀ©Õ¹£¬Linux ϱàÒëʱÐèÒª´øÉÏ ¨Cenable-memcache[=DIR] Ñ¡ÏWindow ÏÂÔòÔÚ php.ini ÖÐÈ¥µô php_memcache.dll ǰ±ßµÄ×¢ÊÍ·û£¬Ê¹Æä¿ÉÓá£

³ý´ËÖ®Í⣬»¹ÓÐÒ»ÖÖ·½·¨£¬¿ÉÒԱܿªÀ©Õ¹¡¢ÖØÐ±àÒëËù´øÀ´µÄÂé·³£¬ÄǾÍÊÇÖ±½ÓʹÓà php-memcached-client¡£

±¾ÎÄÑ¡ÓõڶþÖÖ·½Ê½£¬ËäȻЧÂÊ»á±ÈÀ©Õ¹¿âÉÔ²îһЩ£¬µ«ÎÊÌâ²»´ó¡£

ËÄ¡¢PHP memcached Ó¦ÓÃʾÀý

Ê×ÏÈ ÏÂÔØ memcached-client.php£¬ ÔÚÏÂÔØÁË memcached-client.php Ö®ºó£¬¾Í¿ÉÒÔͨ¹ýÕâ¸öÎļþÖеÄÀà¡°memcached¡±¶Ô memcached ·þÎñ½øÐвÙ×÷ÁË¡£Æäʵ´úÂëµ÷Ó÷dz£¼òµ¥£¬Ö÷Òª»áÓõ½µÄ·½·¨ÓÐ add()¡¢get()¡¢replace() ºÍ delete()£¬·½·¨ËµÃ÷ÈçÏ£º

add ($key, $val, $exp = 0)
Íù memcached ÖÐдÈë¶ÔÏó£¬$key ÊǶÔÏóµÄΨһ±êʶ·û£¬$val ÊÇдÈëµÄ¶ÔÏóÊý¾Ý£¬$exp Ϊ¹ýÆÚʱ¼ä£¬µ¥Î»ÎªÃ룬ĬÈÏΪ²»ÏÞʱ¼ä£»

get ($key)
´Ó memcached ÖлñÈ¡¶ÔÏóÊý¾Ý£¬Í¨¹ý¶ÔÏóµÄΨһ±êʶ·û $key »ñÈ¡£»

replace ($key, $value, $exp=0)
ʹÓà $value Ìæ»» memcached Öбêʶ·ûΪ $key µÄ¶ÔÏóÄÚÈÝ£¬²ÎÊýÓë add() ·½·¨Ò»Ñù£¬Ö»ÓÐ $key ¶ÔÏó´æÔÚµÄÇé¿öϲŻáÆð×÷Óã»

delete ($key, $time = 0)
ɾ³ý memcached Öбêʶ·ûΪ $key µÄ¶ÔÏó£¬$time Ϊ¿ÉÑ¡²ÎÊý£¬±íʾɾ³ý֮ǰÐèÒªµÈ´ý¶à³¤Ê±¼ä¡£

ÏÂÃæÊÇÒ»¶Î¼òµ¥µÄ²âÊÔ´úÂ룬´úÂëÖжԱêʶ·ûΪ 'mykey' µÄ¶ÔÏóÊý¾Ý½øÐдæÈ¡²Ù×÷£º

<pre><?php//   °üº¬ memcached ÀàÎļþrequire_once('memcached-client.php');//   Ñ¡ÏîÉèÖÃ$options = array(    'servers' => array('192.168.1.1:11211'), //memcached ·þÎñµÄµØÖ·¡¢¶Ë¿Ú£¬¿ÉÓöà¸öÊý×éÔªËØ±íʾ¶à¸ö memcached ·þÎñ    'debug' => true,  //ÊÇ·ñ´ò¿ª debug    'compress_threshold' => 10240,  //³¬¹ý¶àÉÙ×Ö½ÚµÄÊý¾Ýʱ½øÐÐѹËõ    'persistant' => false  //ÊÇ·ñʹÓó־ÃÁ¬½Ó    );//   ´´½¨ memcached ¶ÔÏóʵÀý$mc = new memcached($options);//   ÉèÖô˽ű¾Ê¹ÓõÄΨһ±êʶ·û$key = 'mykey';//   Íù memcached ÖÐдÈë¶ÔÏó$mc->add($key, 'some random strings');$val = $mc->get($key);echo "n'.str_pad('$mc->add() ', 60, '_')."n';var_dump($val);//   Ìæ»»ÒÑдÈëµÄ¶ÔÏóÊý¾ÝÖµ$mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));$val = $mc->get($key);echo "n'.str_pad('$mc->replace() ', 60, '_')."n';var_dump($val);//   ɾ³ý memcached ÖеĶÔÏó$mc->delete($key);$val = $mc->get($key);echo "n'.str_pad('$mc->delete() ', 60, '_')."n';var_dump($val);?></pre>

ÊÇ ²»ÊǺܼòµ¥£¬ÔÚʵ¼ÊÓ¦ÓÃÖУ¬Í¨³£»á°ÑÊý¾Ý¿â²éѯµÄ½á¹û¼¯±£´æµ½ memcached ÖУ¬Ï´ηÃÎÊʱֱ½Ó´Ó memcached ÖлñÈ¡£¬¶ø²»ÔÙ×öÊý¾Ý¿â²éѯ²Ù×÷£¬ÕâÑù¿ÉÒÔÔںܴó³Ì¶ÈÉϼõÇáÊý¾Ý¿âµÄ¸ºµ£¡£Í¨³£»á½« SQL Óï¾ä md5() Ö®ºóµÄÖµ×÷ΪΨһ±êʶ·û key¡£Ï±ßÊÇÒ»¸öÀûÓà memcached À´»º´æÊý¾Ý¿â²éѯ½á¹û¼¯µÄʾÀý£¨´Ë´úÂëÆ¬¶Î½ô½ÓÉϱߵÄʾÀý´úÂ룩£º

<?php$sql = 'SELECT * FROM users';$key = md5($sql);   //memcached ¶ÔÏó±êʶ·ûif ( !($datas = $mc->get($key)) ) {    //   ÔÚ memcached ÖÐδ»ñÈ¡µ½»º´æÊý¾Ý£¬ÔòʹÓÃÊý¾Ý¿â²éѯ»ñÈ¡¼Ç¼¼¯¡£    echo "n'.str_pad('Read datas from MySQL.', 60, '_')."n';    $conn = mysql_connect('localhost', 'test', 'test');    mysql_select_db('test');    $result = mysql_query($sql);     while ($row = mysql_fetch_object($result))        $datas[] = $row;    //   ½«Êý¾Ý¿âÖлñÈ¡µ½µÄ½á¹û¼¯Êý¾Ý±£´æµ½ memcached ÖУ¬ÒÔ¹©Ï´ηÃÎÊʱʹÓᣠ   $mc->add($key, $datas);} else {     echo "n'.str_pad('Read datas from memcached.', 60, '_')."n';}var_dump($datas);?>

¿ÉÒÔ¿´³ö£¬Ê¹Óà memcached Ö®ºó£¬¿ÉÒÔ¼õÉÙÊý¾Ý¿âÁ¬½Ó¡¢²éѯ²Ù×÷£¬Êý¾Ý¿â¸ºÔØÏÂÀ´ÁË£¬½Å±¾µÄÔËÐÐËÙ¶ÈÒ²Ìá¸ßÁË¡£

֮ǰÎÒÔø¾­Ð´¹ýһƪÃûΪ¡¶PHP ʵÏÖ¶à·þÎñÆ÷¹²Ïí SESSION Êý¾Ý¡·ÎÄÕ£¬ÎÄÖÐµÄ SESSION ÊÇʹÓÃÊý¾Ý¿â±£´æµÄ£¬ÔÚ²¢·¢·ÃÎÊÁ¿´óµÄʱºò£¬·þÎñÆ÷µÄ¸ºÔØ»áºÜ´ó£¬¾­³£»á³¬³ö MySQL ×î´óÁ¬½ÓÊý£¬ÀûÓà memcached£¬ÎÒÃÇ¿ÉÒԺܺõؽâ¾öÕâ¸öÎÊÌ⣬¹¤×÷Ô­ÀíÈçÏ£º

  • Óà »§·ÃÎÊÍøÒ³Ê±£¬²é¿´ memcached ÖÐÊÇ·ñÓе±Ç°Óû§µÄ SESSION Êý¾Ý£¬Ê¹Óà session_id() ×÷ΪΨһ±êʶ·û£»Èç¹ûÊý¾Ý´æÔÚ£¬ÔòÖ±½Ó·µ»Ø£¬Èç¹û²»´æÔÚ£¬ÔÙ½øÐÐÊý¾Ý¿âÁ¬½Ó£¬»ñÈ¡ SESSION Êý¾Ý£¬²¢½«´ËÊý¾Ý±£´æµ½ memcached ÖУ¬¹©Ï´ÎʹÓã»
  • µ±Ç°µÄ PHP ÔËÐнáÊø£¨»òʹÓÃÁË session_write_close()£© ʱ£¬»áµ÷Óà My_Sess::write() ·½·¨£¬½«Êý¾ÝдÈëÊý¾Ý¿â£¬ÕâÑùµÄ»°£¬Ã¿´ÎÈÔÈ»»áÓÐÊý¾Ý¿â²Ù×÷£¬¶ÔÓÚÕâ¸ö·½·¨£¬Ò²ÐèÒª½øÐÐÓÅ»¯¡£Ê¹ÓÃÒ»¸öÈ«¾Ö±äÁ¿£¬¼Ç¼Óû§½øÈëÒ³ÃæÊ±µÄ SESSION Êý¾Ý£¬È»ºóÔÚ write() ·½·¨ÄڱȽϴËÊý¾ÝÓëÏëҪдÈëµÄ SESSION Êý¾ÝÊÇ·ñÏàͬ£¬²»Í¬²Å½øÐÐÊý¾Ý¿âÁ¬½Ó¡¢Ð´ÈëÊý¾Ý¿â£¬Í¬Ê±½« memcached ÖжÔÓ¦µÄ¶ÔÏóɾ³ý£¬Èç¹ûÏàͬµÄ»°£¬Ôò±íʾ SESSION Êý¾Ýδ¸Ä±ä£¬ÄÇô¾Í¿ÉÒÔ²»×öÈκβÙ×÷£¬Ö±½Ó·µ»ØÁË£»
  • ÄÇ Ã´Óû§ SESSION ¹ýÆÚʱ¼äÔõô½â¾öÄØ£¿¼ÇµÃ memcached µÄ add() ·½·¨Óиö¹ýÆÚʱ¼ä²ÎÊý $exp Â𣿰ÑÕâ¸ö²ÎÊýÖµÉèÖóÉСÓÚ SESSION ×î´ó´æ»îʱ¼ä¼´¿É¡£ÁíÍâ±ðÍüÁ˸øÄÇЩһֱÔÚÏßµÄÓû§ÑÓÐø SESSION ʱ³¤£¬Õâ¸ö¿ÉÒÔÔÚ write() ·½·¨Öнâ¾ö£¬Í¨¹ýÅжÏʱ¼ä£¬·ûºÏÌõ¼þÔò¸üÐÂÊý¾Ý¿âÊý¾Ý¡£

Îå¡¢Ïà¹Ø×ÊÔ´

ǰһƪ£ºmemcachedÎÊÌ⼯
Ç×£¬Äú»¹Ã»ÓеǼ,Çë[µÇ¼]»ò[×¢²á]ºóÔÙ½øÐÐÆÀÂÛ