Tokyo Tyrant(TTServer)系列:memcache协议

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

时间: 2024-09-23 13:02:51

Tokyo Tyrant(TTServer)系列:memcache协议的相关文章

Tokyo Tyrant(TTServer)系列-介绍和安装

Tokyo Cabinet 是Mikio Hirabayashi(平林幹雄)のページ 开发的 一款DBM数据库(注:大名鼎鼎的DBM数据库qdbm就是他开发的),该数据库读写非 常快.insert:0.4sec/1000000 recordes(2500000qps),写入100万数据只需要 0.4秒.search:0.33sec/1000000 recordes (3000000 qps),读取100万数据只需 要0.33秒.下图为各种key-value数据库读写数据的性能测试,可以看出Tok

Tokyo Tyrant(TTServer)系列:启动参数和配置

启动参数介绍 继续上一篇Tokyo Tyrant(TTServer)系列-介绍和安装,我们继续来看启动 参数和配置. ttserver命令可以启动一个数据库实例.因为数据库已经实现了Tokyo Cabinet的抽象API,所以可以在启动的时候指定数据库的配置类型. 支持的数据库类型有: 内存hash数据库 内存tree数据库 hash数据库 B+ tree数据库, 命令通过下面的格式来使用,'dbname'制定数据库名,如果省略,则被视作 内存hash数据库. ttserver [-host n

NoSQL数据库MongoDB、Redis、Tokyo Tyrant的性能比较

准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较: 存储实现的比较: * 内存文件映像(Memory-File Mapping) Redis, MongoDB * 文件 + Cache Tokyo Tyrant * 内存: Redis, Tokyo Tyrant Key/Value索引形式: * B+ Tree : MongoDB, Tokyo Tyrant * Hash Table: Red

go语言实现的memcache协议服务的方法_Golang

本文实例讲述了go语言实现的memcache协议服务的方法.分享给大家供大家参考.具体如下: 完整实例代码点击此处本站下载. 1. Go语言代码如下: 复制代码 代码如下: package memcachep import (     "bufio"     "fmt"     "io"     "strconv"     "strings" ) //mc请求产生一个request对象 type MCReq

MemcacheDB, Tokyo Tyrant, Redis performance test

 http://timyang.net/data/mcdb-tt-redis/      

推荐[搜索引擎架构]的几篇文章

  1.基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计 http://blog.s135.com/post/360/ 2.百度.新浪.Mixi.Apache社区赞助的开源key-value分布式存储系统 http://blog.s135.com/post/394/ 3.利用Tokyo Tyrant构建兼容Memcached协议.支持故障转移.高并发的分布式key-value持久存储系统 http://blog.s135.com/post/362/ 4.亿级数据的高并发通用搜

关于使用key/value数据库redis和TTSERVER的心得体会

本篇文章是对使用key/value数据库redis和TTSERVER的心得体会进行了详细的分析介绍,需要的朋友参考下   先说redisredis是一个类似memcached的key/value存储系统,它支持存储的 value类型相对较多,包括string(字符串). list(链表).set(集合)和zset(有序集合).在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数 据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作

关于使用key/value数据库redis和TTSERVER的心得体会_php技巧

先说redisredis是一个类似memcached的key/value存储系统,它支持存储的value类型相对较多,包括string(字符串). list(链表).set(集合)和zset(有序集合).在此基础上,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件(这点儿个人觉得redis比memcache 在数据保存上要安全一些),并且在此基础上实现了master-

基于php使用memcache存储session的详解

web服务器的php session都给memcached ,这样你不管分发器把 ip连接分给哪个web服务器都不会有问题了,配置方法很简单,就在php的配置文件内 增加一条语句就可以了,不过前提你需要装好memcache模块 1.设置session用memcache来存储方法I: 在 php.ini 中全局设置 session.save_handler = memcache session.save_path = "tcp://127.0.0.1:11211" 方法II: 某个目录下