ITKeyword,专注技术干货聚合推荐

注册 | 登录

Tokyo Tyrant(TTServer)系列(三)-Memcache协议

相关推荐:Tokyo Tyrant(TTServer)系列(一)-介绍和安装

Tokyo Cabinet 是日本人Mikio Hirabayashi 开发的一款DBM 数据库,该数据库读写非常快,哈希模式写入100 万条数据只需0.643 秒,读取100 万条数据只需0.773 秒,

通过Memcache协议使用ttserver 通过telnet 127.0.0.1 9032 telnet连接到到启动的实例。以下我们通过add增加key为key1和value为value1的数据。通过get key1获取数据。(<key> <flags> <exptime> <bytes>)add key1 1 0 6value1STOREDget key1VALUE key1 0 6value1END编写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是一个数组,但是我们取回来的是一个序列化的字符串,没有自动反

相关推荐:Tokyo Tyrant(TTServer)系列(二)-启动参数和配置

启动参数介绍

ttserver命令可以启动一个数据库实例。因为数据库已经实现了Tokyo Cabinet的抽象API,所以可以在启动的时候指定数据库的配置类型。支持的数

序列化,在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上就是成功的。这一点要特别注意。

相关推荐:Tokyo Tyrant(TTServer)系列(六)-数据丢失谁的错

前面的一些文章讲到了memcache以及TT,memcache内存数据库很好理解,数据存储在内存中,重启服务器或者重启memcahce进程,数据是会丢失的。那么我们也提到过TTSe

通过Memcache协议使用ttserver?通过telnet 127.0.0.1 9032 telnet连接到到启动的实例。以下我们通过add增加key为key1和value为value1的数据。通过get key1获取数据。(<key> <flags> <exptime> ...

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。