1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Memcacheでセットした値をMemcachedで取得しようとして、ハマる。

Posted at

PHPでMemcacheを使うためのクラスとして

Memcache

Memcached

がある。

この時点で既にややこしい・・・

現場でモロモロ事情があり、Memcacheのほうでsetした値をMemcachedを使ってgetした際に上手く動かなくて、激ハマリしてしまった。

例えば、以下のようなプログラムがあったとする。

$host = 'localhost';
$port = 11211;

$array = array( 'name' => 'tadasuke' );

// Memcacheインスタンス作成
$mem = new Memcache();
// Memcahce接続
$mem -> connect( $host, $port );
// 値をセット
$mem -> set( 'test', $array );
// セットした値を取得
$result = $mem -> get( 'test' );
// 接続解除
$mem -> close();

var_dump( $result );

出力結果はこんな感じ。

array(1) { ["name"]=> string(8) "tadasuke" }

今度はこれをMemcachedを使って取得してみる。

$host = 'localhost';
$port = 11211;

$array = array( 'name' => 'tadasuke' );

// Memcacheインスタンス作成
$mem = new Memcache();
// Memcahce接続
$mem -> connect( $host, $port );
// 値をセット
$mem -> set( 'test', $array );
// セットした値を取得
$result = $mem -> get( 'test' );
// 接続解除
$mem -> close();

//var_dump( $result );

// Memcahcedインスタンス作成
$memd = new Memcached();
// Memcacheに接続
$memd -> addServer( $host, $port );

// セットした値を取得
$result = $memd -> get( 'test' );
// 接続解除
$memd -> quit();

var_dump( $result );

出力結果はまさかのこんな感じ。

int(0)

試しにsetする値を配列ではなくて数値や文字列にしてみたところ、MemcacheでもMemcachedでも同じように出力された。

どうも、MemcahceとMemcachedでは配列やオブジェクトをシリアライズさせる方法がが違うっぽい。

こんなん、分かるかいっ!!

というわけで、皆さん注意しましょうね。
MemcacheとMemcachedを両方使うっていうこと自体が、なかなかレアなケースだろうけど・・・

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?