Может ли memcache хранить структуры данных в PHP, такие как splqueue? - PullRequest
2 голосов
/ 23 февраля 2012

Я пытаюсь сохранить 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

Когда я запускаю этот код, я получаю 2 в строке a и 0 в строке b. Так что это, вероятно, означает, что хранение структуры данных в memcache не работает.

Итак, у меня есть следующие три вопроса.

  1. Я сделал что-то не так или есть другой способ сохранить splqueue в memcache?

  2. Я также обнаружил SplObjectStorage для структур данных Spl. Может ли это быть решением моей проблемы?

  3. Может ли memcached (НЕ memcache) хранить структуры данных?

1 Ответ

2 голосов
/ 23 февраля 2012

Memcache::set() будет сериализовать нескалярные значения. SplQueue, по-видимому, не реализует интерфейс SPL Serializable, поэтому на него нельзя полагаться для правильной сериализации / десериализации. Вы можете расширить SplQueue, внедрить Serializable, а затем создать для этого подходящую стратегию сериализации / десериализации.

SplObjectStorage реализует Serializable, и поэтому я ожидаю, что он будет правильно входить и выходить из Memcache.

Для других структур SPL вы должны проверить реализацию Serializable.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...