绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Tokyo Tyrant(TTServer)系列-memcache协议
2022-04-13 17:13:45

通过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上就是成功的。这一点要特别注意。
分享好友

分享这个小栈给你的朋友们,一起进步吧。

Tokyo Tyrant
创建时间:2022-04-13 16:33:57
Tokyo Tyrant
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • LCR_
    专家
戳我,来吐槽~