首页 > 代码库 > Tokyo Tyrant(TTServer)系列(三)-Memcache协议
Tokyo Tyrant(TTServer)系列(三)-Memcache协议
通过Memcache协议使用ttserver
通过telnet 127.0.0.1 9032 telnet连接到到启动的实例。
以下我们通过add增加key为key1和value为value1的数据。
通过get key1获取数据。(<key> <flags> <exptime> <bytes>)
add key1 1 0 6 value1 STORED get key1 VALUE key1 0 6 value1 END |
编写php脚本
$mem=new Memcache(); $mem->connect("127.0.0.1",9032); $mem->add("key2","xifeijian"); print_r( $mem->get("key2")); echo "<br />"; $mem->add("key3",array("value3"=>"this is xifeijian")); echo $mem->get("key3"); ?> |
运行后输出:(在服务器上直接执行php脚本,如果在浏览器中访问,效果就更加直观。)
需要注意的问题
序列化问题
如果你熟悉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("127.0.0.1",9032); var_dump($mem->increment("incr")); //结果为int(1) ?> |
//使用memcache自增 $mem=new Memcache(); $mem->connect("127.0.0.1",9023); var_dump($mem->increment("incr")); //结果为bool(false) ?> |
我们看到同样的代码用在memcache返回了失败(false)。我们可以在php手册上看到这样一句话“Memcache::increment() does not create an item if it didn‘t exist.”但是同样的,用在ttserver上就是成功的。这一点要特别注意。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。