Top / PECL / memcache


 #setlinebreak(on)
 * memcachedラッパークラス:memcache  [#c650e3f9]
 
 [[PHPのsessionにmemcacheを使う>PECL/memcache/session]]
 [[memcacheがsessionサポート>PECL/memcache/session_support]]
 
 #htmlinsert(googleAdsense.html)
 #ref(http://dozo.rgr.jp/img/img52_pecl.gif,right,nolink,around,PHP::PECL)
 
 [[PHP>http://www.php.net/]]に限ったことではありませんが、
 [[memcached>http://www.danga.com/memcached/]]を使えばすべてのWEBアプリ用言語で静的インスタンス(static instance)が使えます。
 slashdot(スラッシュドット)がこれを使って運用している模様。
 (言語はperl、mod_perlを使っているみたい)
 [[PECL::memcache>http://pecl.php.net/package/memcache]]はそれのラッパークラス。
 
 (ノ・・)ン。。。。。。(((●コロコロッ
 
 [[Java>http://www.java.com/]]ではできるオブジェクトの永続化(静的インスタンス)。
 [[PHP>http://www.php.net/]]でやろうとするとセッションにserializeして格納するぐらいしかないのですが、
 それでも一ユーザーに対してしか制御できません。
 全ユーザーに対してひとつのオブジェクトを使いたいときはこれを使います。
 (それってどんな時?って言われると・・・ ( ̄-  ̄ ) ウーン)
 
 インストールは
 [[memcached>http://www.danga.com/memcached/]]をインストールしている状態で、
  # pear download memcache
  # pear install memcache-x.x.tgz
 あとはphp.iniに
  extension=memcache.so
 とすればOK。
 
 使い方はこんな感じ。
 初回起動プログラム(initialize.php)を一度動かしてデータを格納します。
 それ以降は通常利用プログラム(default.php)を動かします。
 データがちゃんととれているのがわかります?
 
 初回起動プログラム
  initialize.php
  <?php
  
   $memcache = new Memcache;
   $memcache->connect('localhost', 11211) or die ("Could not connect");
  
   if ($memcache) {
 	$memcache->set("str_key", "文字列を格納");
 	$memcache->set("num_key", 123); // 数値を格納
  
 	$object = new StdClass;
 	$object->attribute = 'test';
 	$memcache->set("obj_key", $object); // オブジェクトを格納
  
 	$array = Array('assoc'=>123, 345, 567);
 	$memcache->set("arr_key", $array);  // 配列を格納
  
          echo nl2br( print_r($memcache->get('str_key'), true ))."<br />";
          echo nl2br( print_r($memcache->get('num_key'), true ))."<br />";
          echo nl2br( print_r($memcache->get('obj_key'), true ))."<br />";
          echo nl2br( print_r($memcache->get('arr_key'), true ))."<br />";
   }
   else {
 	echo "Connection to memcached failed";
   }
  ?>
 
 通常利用プログラム
  default.php
  <?php
  
   $memcache = new Memcache;
   $memcache->connect('localhost', 11211) or die ("Could not connect");
  
   if( $memcache ){
     echo nl2br( print_r($memcache->get('str_key'), true ))."<br />";
     echo nl2br( print_r($memcache->get('num_key'), true ))."<br />";
     echo nl2br( print_r($memcache->get('obj_key'), true ))."<br />";
     echo nl2br( print_r($memcache->get('arr_key'), true ))."<br />";
   }
   else {
     echo "Connection to memcached failed";
   }
  
  ?>
 
 
 デメリット
  今ひとつ利用方法が浮かばない。。。
  (メモリにキャッシュするのと大差ないし)
 
 [[mmcache>http://turck-mmcache.sourceforge.net/]]とは別物ですので悪しからず。
 
 memcachedでセッション管理というものあるらしい。
 [[WS Memcached Session Handler for PHP>http://weirdsilence.net/software/memsession/]]
 http://weirdsilence.net/software/memsession/
 ただsessionについてはもう少し上の層でやりたいところだが。。。
 
 
 Ver2.0で複数台あるウェブサーバにネイティブ対応した模様です。
 
 
 -負荷分散などでウェブサーバが複数台あるときに有用に使えると思います。 -- [[reo]] &new{2005-09-30 20:02:31 (金)};
 -_〆(。。)メモメモ… -- [[dozo]] &new{2005-10-07 01:08:19 (金)};
 -PHPのstaticってリクエスト毎にメモリ破棄されるようなので(ガーン)、元来シングルトンでインスタンス生成のオーバーヘッドを押さえたいオブジェクトをメモリキャッシュに保持するっていうのは重要な使い方の一つだと思いますよ --  &new{2005-10-12 11:43:42 (水)};
 -どうなんでしょうね?そのあたりのオーバーヘッドって微々たるものな気もするんですが。 -- [[dozo]] &new{2005-10-12 18:50:15 (水)};
 -mod_proxyを用いたHTTPレイヤでのキャッシュではなく、1つ上層であるアプリケーションレイヤでキャッシュできる仕組みというところがあつい。キャッシュの破棄・生成がアプリケーションで制御できるのがいい。 -- [[matsu]] &new{2006-09-28 15:03:55 (木)};
 -やはり用途はセッションとキャッシュって感じですかねぇ。試しにセッションで使ってみましたが、なかなか良い結果ですよ。 -- [[dozo]] &new{2006-10-02 09:28:30 (月)};
 
 #comment


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較