memcachedをインストールしてみる

| No Comments | No TrackBacks

しばらく放置気味でした^^;;;

かなり前にmemcachedについて調べてた内容を、今更ながらアップしてみる。

既に多くのウェブサービスで利用されているので、ほんとに今更なんだけども、、、

実際ビジネスユースで使うには、32bitOSではセッション情報と簡単な設定くらいしか(サイズ的に)利用が難しいかなぁ。それなりのデータを保存するには、それこそ台数でカバーするしか、、、

でも、64bitOSだと利用可能なメモリサイズが段違いなので、色々と利用シーンがありそうですよね。

//
// memcached
//
■概要
---
 データやオブジェクトを分散的にメモリにキャッシュするためのシステム。
 複数のサーバで各サーバのメモリ空間を共有のメモリ空間として扱うことができるため、
 データベースに比べ、高速で簡易かつスケーラビリティに飛んだデータ共有を実現できる。

  サーバA|サーバB|サーバC
 ------------------------------
  (共有メモリ空間)ハッシュ

■インストール
---
 (1) libevent
  # yum install libevent libevent-devel
  ※RPMでも可

 (2) memcached
  ・下記よりソースをダウンロード
   http://memcached.org/

  ・コンパイル
   # tar xvfz memcached-1.4.4.tar.gz -C /tmp
   # ./configure
   # make
   # make install

  ・起動
   /usr/local/bin/memcached -d -m 256 -l [IPアドレス] -p 11211
    -d: デーモンとして起動
    -m: メモリサイズ(MB)
    -l: Listenアドレス
    -p: Listenポート
   # su - apache
   $ /usr/local/bin/memcached -d -m 256 -l [IPアドレス] -p 11211
   ※rootでは起動できない

  ・接続確認
   # telnet [IPアドレス] 11211
■コマンド
---
 telnet で接続後

 (1) 基本クライアント・コマンド
  1. set, add, replace

   コマンド構文:
    command <key> <flags> <expiration time> <bytes>(改行)
    <value>

     key: キャッシュのキー
     flags: キーと値のペアに関連付ける付加情報(整数)
     expiration time: キャッシュに保持する期間 (0 は永続的、単位は秒)
     bytes: キャッシュに保存するバイト数
     value: キャッシュの値

  ・set
   新しいキーと値のペアーを追加します。既に同じキーが存在する場合は上書きします。

〜〜〜サンプル〜〜〜
set user 0 0 5  << 入力
12345           << 入力
STORED          >> 出力
〜〜〜サンプル〜〜〜

  ・add
   新しいキーと値のペアーを追加します。既に同じキーが存在する場合は NOT_STORED が返されます。

〜〜〜サンプル〜〜〜
set userId 0 0 5
12345
STORED
〜〜〜サンプル〜〜〜

  ・replace
   指定したキーが存在する場合にのみ、上書きします。存在しない場合は NOT_STORED が返されます。

〜〜〜サンプル〜〜〜
replace userId 0 0 5
6789
STORED
〜〜〜サンプル〜〜〜

  2. get, delete

   コマンド構文:
    command <key>

     key: キャッシュのキー

  ・get
   指定したキーが存在する場合には値を返します。存在しない場合には何も返しません。

〜〜〜サンプル〜〜〜
get userId
VALUE userId 0 5
12345
END
get undefined
END
〜〜〜サンプル〜〜〜

  ・delete
   指定したキーが存在する場合には削除します。存在しない場合には NOT_FOUND が返されます。

〜〜〜サンプル〜〜〜
delete userId
DELETED
delete undefined
NOT_FOUND
〜〜〜サンプル〜〜〜

 (2) 拡張クライアント・コマンド
  ・gets
   指定したキーが存在すれば、更新番号を付加して返す。

〜〜〜サンプル〜〜〜
gets userId
VALUE userId 0 5 5
12345
〜〜〜サンプル〜〜〜

  ・cas(check and set)
   setと同様であるが、上記の更新番号を指定して実行するため、更新番号が最新でない場合エラーになる。
   SELECT FOR UPDATE のようなイメージ。

〜〜〜サンプル〜〜〜
set userId 0 0 5
12345
STORED

gets userId
VALUE userId 0 5 3
6789
END

cas userId 0 0 5 2
11111
EXISTS
〜〜〜サンプル〜〜〜

 (3) キャッシュ管理用コマンド
  ・stats
   キャッシュの使用効率などの統計情報が返されます。

〜〜〜サンプル〜〜〜
stats
STAT pid 7376
STAT uptime 768
STAT time 1261131795
STAT version 1.4.4
STAT pointer_size 32
STAT rusage_user 0.000000
STAT rusage_system 0.020996
STAT curr_connections 5
STAT total_connections 6
STAT connection_structures 6
STAT cmd_get 2
STAT cmd_set 1
STAT cmd_flush 0
STAT get_hits 1
STAT get_misses 1
STAT delete_misses 1
STAT delete_hits 1
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 92
STAT bytes_written 63
STAT limit_maxbytes 268435456
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 1
STAT evictions 0
END
〜〜〜サンプル〜〜〜

   ・flush_all
    キャッシュを全てクリアする。

〜〜〜サンプル〜〜〜
flush_all
OK
〜〜〜サンプル〜〜〜

   ・quit
    コネクションの終了

■php-memcache
---
 ・インストール
  # /usr/local/bin/pecl search memcache

 ・/usr/local/lib/php.ini

〜〜〜サンプル〜〜〜
extension=memcache.so
〜〜〜サンプル〜〜〜

 ・テストスクリプト(起動処理)

〜〜〜サンプル〜〜〜
<?php

$memcache = new Memcache;
$memcache->connect('hoge.com', 11211) or die ("Can't connect.");

if ($memcache) {
        $object = new StdClass;
        $object->objectkey = 'test';
        $memcache->set("object", $object);

        echo "OK!";
} else {
        echo "Undefined memcache object.";
}

?>
〜〜〜サンプル〜〜〜

 ・テストスクリプト(取得処理)

〜〜〜サンプル〜〜〜
<?php

$memcache = new Memcache;
$memcache->connect('hoge.com', 11211) or die ("Can't connect.");

if ($memcache) {
        $object = $memcache->get("object");

        echo $object->objectkey;
} else {
        echo "Undefined memcache object.";
}

?>
〜〜〜サンプル〜〜〜

■参考
---
 http://www.ibm.com/developerworks/jp/java/library/j-memcached1/#resources

広島ブログ

No TrackBacks

TrackBack URL: http://mt.himawari-dream.com/mt-tb.cgi/522

Leave a comment

About this Entry

This page contains a single entry by kado published on 2010年7月17日 09:39.

【結果報告】LPIC Level 1 Exam 102試験を受けてみた was the previous entry in this blog.

MogileFS を試してみた is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.