php - memcache可以存储PHP中的splqueue等数据结构吗?

标签 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。所以这可能意味着在内存缓存中存储数据结构不起作用。

所以我有以下三个问题。

  1. 我是否做错了什么或者有其他方法可以将 splqueue 存储在内存缓存中?

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

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

最佳答案

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

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

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

希望这有帮助。

关于php - memcache可以存储PHP中的splqueue等数据结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9417072/

相关文章:

php - 在mysql中插入第一行后无法插入行

php - MySQL - 连接失败 : No route to host

memcached - 如何使用 capistrano 清除内存缓存?

mysql - NoSQL/InnoDB 与 Memcached

ruby-on-rails - Ruby on Rails 中的奇怪重定向

php - 在后台每分钟点击一次 URL

php - 提交表单两次或刷新两次

c++ - 经过良好测试的 C/C++ 无锁队列?

c - 使用单链表更新队列 adt 中的尾指针时遇到问题

c# - 使用 async/await 快速处理队列