【问题标题】:Can memcache store data structures in PHP such as splqueue?memcache 可以在 PHP 中存储 splqueue 等数据结构吗?
【发布时间】:2012-02-23 16:29:51
【问题描述】:

我正在尝试将 splqueue 存储到内存缓存(不是内存缓存)。以下示例代码是为此目的进行的简单测试。

$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. 是我做错了什么还是有其他方法可以将 splqueue 存储在 memcache 中?

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

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

【问题讨论】:

  • 是的。感谢您指出。我已经更新了我的代码

标签: php memcached queue


【解决方案1】:

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

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2010-11-15
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多