通過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上就是成功的。這一點要特別注意。