2013.02.18

【PHP】Windows版 PHPへのmemcache組み込みメモ

Windowsでサーバー処理は面倒だな。

php_memcache.dllを探す

サーバーについては前に使っていたものがもう稼働済みなので
これをそのまま使う方向にしました。

PHPクライアントはWindowsもpeclあたりでインストールすればいいんじゃないかと
コマンドを叩いてみましたがどうも無理なようです。

全体的にWindows版はdllを自分でコンパイルするのが基本らしい。
しかしそれでは面倒なので誰かがコンパイルして配布しているものを使うのがベター。

ということで探します。
さっくりと5.3版は見つかるけど現在入れているのが5.4版がなかなか見つからない。
このあたりでそれっぽいのがあったのでこれで動作することを確認しました。
Link:memcached - Class 'Memcache' not found & PHP - Stack Overflow

ntsありとなしがあるけどたぶんこれはNonThreadSafe版かそうじゃないかという意味ではないかな?
自分はThreadSafe版なので何もついていない方を入れました。

あとはextにphp_memcache.dllを入れて、php.iniのextensionに加えて
Apacheの再起動をすれば使えるようになりました。

Memcache? Memcached?

上記のものはMemcacheクラス(dがつかない)になります。
正式名称がmemcachedなのでdがつくほうかと思っていましたがどうも違うらしい。

ヘルプも2つあってどっちだかわかりにくい。
このあたりはもう少しわかりやすくならないものでしょうか。

こちらのヘルプが正しい。
Link:PHP: Memcache - Manual

サンプル

自分がためしたサンプルはこちら。

<?php

//クラスの存在チェック
if( class_exists( "Memcache" ) )
{
	$m = new Memcache();
	
	//接続先を追加
	$m->addServer('localhost', 11211);
	
	//データ取得
	$val = $m->get('key');
	if( $val != FALSE )
	{
		//データがあればそのまま表示する
		echo '設定あり:'.$val.'<br>';
	}
	else
	{
		//データがなければ新規追加
		$m->set('key', date('Y/m/d H:i:s'), 0, 10); //10秒だけ有効
		
		echo '新規設定:'.date('Y/m/d H:i:s').'<br>';
	}

	//---------------------------------------------------------
	//キー情報の取得
	$stats = $m->getStats();
	$memcached_started_time = $stats['time'] - $stats['uptime'];

	$stats_item = $m->getStats('items');
	$items = $stats_item['items'];
	foreach ($items as $slabclass => $item)
	{
		$stats_cachedump = $m->getStats('cachedump', $slabclass, $item['number']);
		
		foreach ($stats_cachedump as $cache_key => $v)
		{ 
			if (0 <= ($v[1] - $memcached_started_time))
			{
				echo $cache_key.'<br>';
			}
		}
	}
}

?>

後半はmemcacheが現在有効なキーリストを列挙する処理になります。
こういうのはあると便利ですからね。
このページを参考にしました。
Link:memcached の無期限キャッシュを取得する方法 - do_akiの徒然想記


ということでなんとかmemcacheが動いてくれるようになりました。
memcacheをうまく使っていきたいですね。

Pocket

ニャッキ格闘列伝 > プログラム >

前の記事:
次の記事:

コメントリスト

コメントなし

コメント



*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

こんなタグが使えるみたいよ:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>