• 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。或者我们的client来控制。
    比方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上就是成功的。这一点要特别注意。


  • 相关阅读:
    HRMSYS项目源码分析(二)
    HRMSYS项目源码分析(一)
    SQL类型转换以及自动在前面补0满足10位工号标示法
    android—资源文件(res)的引用
    SQL serve创建与调用存储过程
    .wsdl文件生成.cs文件
    android 文件操作类简易总结
    android EncodingUtils
    FTP创建与操作
    如何调试框架中的app
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5207560.html
Copyright © 2020-2023  润新知