神崎
2010年3月5日 金曜日

こんにちは。
昨年の10月末に、人力車で初出社した神崎です。

TokyoCabinet/TokyoTyrantをPHPで使う方法を簡単に書きます。

まず、TCはファイルにデータを保存しデータの永続化を可能にしたKVSで高速に動作します。
TTはTCのリモートアクセスをするためのラッパーで、memcache互換のプロトコルもあります。

TC/TTをPHPから利用するには
memcacheのプロトコルを利用しMemcache関数を使う方法や
Openpear.orgで公開されているPurePHPのNet_TokyoTryantを利用することができます。

Memcache関数を使う場合

$ip     = "127.0.0.1";
$port   = 1978;

$memcache = new Memcache();

/**
 * connect
 */
if (!$memcache->pconnect($ip, $port)) {
    echo "connect error";
}

/**
 * put
 */
$memcache->set('now',date('Y-m-d H:i:s'));

/**
 * get
 */
$result = $memcache->get('now');
var_dump($result);

/**
 * delete
 */
$memcache->delete('now');

Net_TokyoTyrantを利用する場合

require_once 'Net/TokyoTyrant.php';

/**
 * connect
 */
$tt = new Net_TokyoTyrant();
$tt->connect($ip, $port);

/**
 * put
 */
$tt->set('now',date('Y-m-d H:i:s'));
$tt->set('token',md5(uniqid()));

$tt->set('ipod','5g');
$tt->set('iphone','3gs');

/**
 * get
 */
var_dump($tt->get('now'));

// 複数のkeyの値を取得
var_dump($tt->mget(array('now', 'token')));

// keyの一部でリストを取得
var_dump($tt->fwmkeys('ip', 100));

$fwmkeys = $tt->fwmkeys('ip', 100);
foreach($fwmkeys as $key) {
    echo $key . ":" . $tt->get($key) . "n";
}

/**
 * out
 */
$tt->out('now');

高速で動作して欲しいことに加えてデータの永続化が必要な要件においては
TC/TTを利用することを考えてみるのも良いかもしれません。

http://1978th.net/tokyocabinet
http://1978th.net/tokyotyrant
http://openpear.org/package/Net_TokyoTyrant