memcache可以在PHP中存储数据结构,例如splqueue吗?

时间:2012-02-23 16:29:51

标签: php memcached queue

我正在尝试将splqueue存储到memcache(不是memcached)。以下示例代码是用于此目的的简单测试。

$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

当我运行此代码时,我在第a行中获得2,在第b行中获得0。所以它可能意味着在memcache中存储数据结构不起作用。

所以我有以下三个问题。

  1. 我做错了什么或者有其他方法在memcache中存储splqueue?

  2. 我还发现SplObjectStorage用于Spl数据结构。这可以解决我的问题吗?

  3. memcached(NOT memcache)可以存储数据结构吗?

1 个答案:

答案 0 :(得分:2)

Memcache::set()将序列化非标量值。 SplQueue似乎没有实现SPL Serializable接口,因此不能依赖于正确序列化/反序列化。您可以扩展SplQueue,实现Serializable,然后为此目的构建一些适当的序列化/反序列化策略。

SplObjectStorage确实实现了Serializable,因此我希望它能够正确地进出Memcache

对于其他SPL结构,您应该检查Serializable的实现。

希望这有帮助。