2012-02-23 45 views
2

我想將splqueue存儲到memcache(而不是memcached)。以下示例代碼是一個用於此目的的簡單測試。Memcache能否在PHP中存儲數據結構,例如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 

當我運行這段代碼時,我得到了2行a和0行b。所以這可能意味着在memcache中存儲數據結構不起作用。

所以我有以下三個問題。

  1. 我做錯了什麼,或者有另一種方法在memcache中存儲splqueue嗎?

  2. 我還爲Spl數據結構找到了SplObjectStorage。這可以解決我的問題嗎?

  3. memcached(NOT memcache)可以存儲數據結構嗎?

+0

是的。感謝您指出。我更新了我的代碼 – 2012-02-23 16:33:42

回答

2

Memcache::set()將序列化非標量值。 SplQueue似乎沒有實現SPL Serializable接口,因此無法正確地序列化/反序列化。您可以擴展SplQueue,實現Serializable,然後爲此構建一些適當的序列化/非序列化策略。

SplObjectStorage確實實施了Serializable,所以我希望它能正確地進出Memcache

對於其他SPL結構,您應該檢查執行Serializable

希望這會有所幫助。