2012-02-23 3 views
2

私は(memcachedではなく)memcacheにsplqueueを格納しようとしています。次のサンプルコードは、この目的のための簡単なテストです。memcacheはsplqueueのようなPHPでデータ構造を保存できますか?

$mc = new Memcache(); 
$mc->addServer("127.0.0.1", 11300); 
$mc->addServer("127.0.0.1", 11301); 
$mc->addServer("127.0.0.1", 11302); 

$q = new SplQueue(); 
$q->enqueue(10); 
$q->enqueue(20); 
$q->count(); // line a 

$mc->set("spl_queue", $q); 
$p = $mc->get("spl_queue"); 
$p->count(); // line b 

このコードを実行すると、2行目と0行目が得られます。つまり、おそらくmemcacheにデータ構造を格納することは機能しません。

私は次の3つの質問があります。

  1. 私は間違ったことをしましたか、またはmemcacheにsplqueueを格納する別の方法がありましたか?

  2. また、Splデータ構造用のSplObjectStorageも見つかりました。これは私の問題の解決策ですか?

  3. memcached(NOT memcache)はデータ構造を格納できますか?

+0

はい。指摘してくれてありがとう。コードを更新しました –

答えて

2

Memcache::set()は、非スカラー値をシリアライズします。 SplQueueはSPL Serializableインターフェイスを実装するようには見えません。したがって、シリアル化/シリアル化解除に正しく依存することはできません。 SplQueueを拡張し、Serializableを実装して、この目的のために適切なシリアライズ/シリアライズ戦略を構築することができます。

SplObjectStorageSerializableを実装していますので、正しくMemcacheに出入りすると思います。

他のSPL構造については、Serializableの実装をチェックする必要があります。

これが役に立ちます。