Tokyo Tyrant(TTServer)系列-memcache協議 [

通過memcache協議使用ttserver 通過telnet 127.0.0.1 1978 telnet連接到到我們第一節的啓動實例。

以下我們通過add增加key爲key1和value爲value1的數據。

通過get key1獲取數據,如果你看不明白,可以搜索 下memcache協議的東西看下。

add key1 1 0 6
value1
STORED
get key1
VALUE key1 0 6
value1
END




通過php使用


$mem=new Memcache();
$mem->connect ("192.168.15.178" ,1978 );
$mem->add ("key2" ,"value2" );
print_r( $mem->get ("key2" ));
echo
"<hr>" ;
$mem->add ("key3" ,array ("value3" =>"this is value3" ));
print_r($mem->get ("key3" ));
?>




運行後輸出:

   
value2 a:1:{s:6:"value3";s:14:"this is value3";}



需要注意的問題序列化問題  如果你熟悉memcache協議,或者你曾經用php的memcache來使用ttserver,你可能馬上就發現了上面的問題。

比如我們key3是一個數組,但是我們取回來的是一個序列化的字符串,沒有自動反序列化,在memcached服務器上是會自動反序列化的。

    通過上面的telnet示例我們可以看到,我們add key1的時候設置flag參數爲1,但是我們get回來的時候,返回的flag參數是0,實際上,ttserver是沒有存儲 flag參數的,統一的都使用0,這就造成了php使用時不會自動反序列化,當然,如果你使用壓縮 參數,一樣會有這樣的問題。

    怎麼樣解決這個問題,如果要修改ttserver的代碼實爲不方便。我們完全可以在php,或者我們的客戶端來控制。

比如value我們統一的都序列化後存儲,取出來的時候我們再反序列化。

自增問題


//使用ttserver自增
$mem=new Memcache();
$mem->connect ("192.168.15.178" ,1978 );
var_dump($mem->increment ("incr" ));
//結果爲int(1)
?>




//使用memcache自增
$mem=new Memcache();
$mem->connect ("192.168.15.178" ,11211 );
var_dump($mem->increment ("incr" ));
//結果爲bool(false)
?>


我們看到同樣的代碼用在memcache返回了失敗(false).我們可以在php手冊上看到這樣一句話“Memcache::increment() does not create an item if it didn't exist.”但是同樣的,用在ttserver上就是成功的。這一點要特別注意。

發佈了335 篇原創文章 · 獲贊 3 · 訪問量 66萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章