[清空数据]Tokyo Tyrant(TTServer)系列-memcache协议及启动ttserver示例。

jackxiang 2013-10-12 09:39 | |
背景:其实ttserver一直没有实践过,昨天有同事问怎么样清空,我查了下好像和memcache一样的协议,用telnet上其端口用:flush_all 就能清空。
通过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使用

运行后输出:

value2 a:1:{s:6:"value3";s:14:"this is value3";}

来自:http://www.cnblogs.com/sunli/archive/2009/03/18/1415168.html
用Nginx作反向代理 :http://blog.csdn.net/starxu85/article/details/5247491
摘录:
2.利用nginx实现http协议的高可用性
2.1为什么要把nginx扯进来?
ttserver提供了http接口
ttserver没有提供安全 保证
nginx在处理http请求和反向代理的性能 非常好

nginx的反向代理具有负载均衡和健康检查功能
当然,也可参考:http://www.s135.com/post/384/


启动ttserver的示例:


ttserve安装及测试:
概述
编辑

Tokyo Cabinet 是一款 DBM 数据库,该数据库读写非常快,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒,是 Berkeley DB 等 DBM 的几倍。利用Tokyo Tyrant构建兼容Memcached协议、支持故障转移、高并发的分布式key-value持久存储系统。key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。
Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。
2ttserve安装
编辑

下载zlib和bzip并进行安装,因为我使用的是ubuntu系统,所以直接apt-get install libbz2-dev就 ok了。
安装tokyo cabinet
下载 tokyocabinet-1.4.41.tar.gz
tar zxvf tokyocabinet-1.4.41.tar.gz
cd tokyocabinet-1.4.41/
64位系统安装方法
./configure
make
make install
32位系统安装方法
./configure --enable-off64 #启动64位偏移,因为本机是32位,如果不加此参数,数据库文件超过2G就会崩溃
make
make install
因为我的机器是32位,所以选择第二种方法
安装tokyo tyrant
tar zxvf tokyotyrant-1.1.40.tar.gz
cd tokyotyrant-1.1.40
./configure
make
make install
创建tokyo tyrant数据文件存放的目录
mkdir -p /ser/ttserver
ttserver相关参数
ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [-ext path] [-mask expr] [-unmask expr] [dbname]
-host name : 指定需要绑定的服务器域名或IP地址。默认绑定这台服务器上的所有IP地址。
-port num : 指定需要绑定的端口号。默认端口号为1978
-thnum num : 指定线程数。默认为8个线程。
-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。
-dmn : 以守护进程方式运行。
-pid path : 输出进程ID到指定文件(这里指定文件名)。
-log path : 输出日志信息到指定文件(这里指定文件名)。
-ld : 在日志文件中还记录DEBUG调试信息。
-le : 在日志文件中仅记录错误信息。
-ulog path : 指定同步日志文件存放路径(这里指定目录名)。
-ulim num : 指定每个同步日志文件的大小(例如128m)。
-uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill掉,将导致部分数据丢失。一般情况下不建议使用)。
-sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号)
-mhost name : 指定主辅同步模式下,主服务器的域名或IP地址。
-mport num : 指定主辅同步模式下,主服务器的端口号。
-rts path : 指定用来存放同步时间戳的文件名。
-ext path : 扩展的脚本文件
-mask expr : 需要禁止的命令,多个命名用","隔开
-unmaks expr : 允许的命令
单机模式启动
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ser/ttserver/ttserver.pid -log /ser/ttserver/ttserver.log -le -ulog /ser/ttserver/ -ulim 128m -sid 1 -rts /ser/ttserver.rts /ser/ttserver/database.tch
启动的时候,根据参数database名来确定使用的TC数据库类型。如果为"*",则使用内存hash表,如果为"+",则使用内存B+库,如果后缀为".tch",则使用hash表,如果后缀为".tcb",则使用B+树数据库,如果后缀为".tcf",则使用定长数组。如果dbname参数被省略,则采用内存hash数据库。
如果使用的是哈希数据库,可以指定参数“#bnum=xxx”来提高性能。它可以指定bucket存储桶的数量。例如指定“#bnum=1000000”,就可以将最新最热的100万条记录缓存在内存中。
ttserver -host 127.0.0.1 -port 11211 -thnum 8 -dmn -pid /ser/ttserver/ttserver.pid -log /ser/ttserver/ttserver.log -le -ulog /ser/ttserver/ -ulim 128m -sid 1 -rts /ser/ttserver.rts /ser/ttserver/database.tch#bnum=1000000
如果大量的客户端访问ttserver,请确保文件描述符够用。许多服务器的默认文件描述符为1024,可以在启动ttserver前使用ulimit命令提高这项值。例如:ulimit -SHn 51200
关闭服务
cat /ser/ttserver/ttserver.pid或者ps -ef|grep ttserver
kill -TERM 10095
调用
写入
curl -X PUT http://127.0.0.1:11211/key -d "ttserver"
读取
curl http://127.0.0.1:11211/key
删除
curl -X DELETE http://127.0.0.1:11211/key
测试写入和读取1000条数据
starttime=`date "+%s"`;for((i=1;i<1001;i++)); do curl http://127.0.0.1:11211/key_$i; done;endtime=`date "+%s"`;echo $(($endtime-$starttime));

摘自:http://baike.baidu.com/view/3551871.htm?fr=aladdin

附录:CURL -X参数说明
-X/--request <command> Specify request command to use
写入
curl -X PUT http://127.0.0.1:11211/key -d "ttserver"
读取
curl http://127.0.0.1:11211/key
删除
curl -X DELETE http://127.0.0.1:11211/key
测试写入和读取1000条数据
starttime=`date "+%s"`;for((i=1;i<1001;i++)); do curl http://127.0.0.1:11211/key_$i; done;endtime=`date "+%s"`;echo $(($endtime-$starttime));

可以用fiddler2加上curl的代理了解这个-X:
curl -x 10.0.0.172:80 www.wo.com.cn 此命令使用10.0.0.172:80这个代理服务器IP和端口访问站点www.wo.com.cn

fiddler2 提供的 8888 端口(ttserver:21211,21213):
curl -x 127.0.0.1:8888 -X PUT http://192.168.109.7:21211/key -d "ttserver"
读取:
curl -x 127.0.0.1:8888 http://192.168.109.7:21211/key
删除
curl -x 127.0.0.1:8888  -X DELETE http://192.168.109.7:21211/key

上面的写入读取及删除,实践如下:

单独对写入作fiddler2下的http请求头分析:
一)C:\Users\admin>curl -x 127.0.0.1:8888 http://192.168.109.7:21211/key
ttserver

POST参数,fiddler2的右侧webform:


http请求返回:
HTTP/1.1 201 Created
Content-Type: text/plain
Content-Length: 8
Created
[/codes]

二)C:\Users\admin>curl -x 127.0.0.1:8888 http://192.168.109.7:21211/key
ttserver

返回:


三)C:\Users\admin>curl -x 127.0.0.1:8888  -X DELETE http://192.168.109.7:21211/key
OK
请求头:


返回:


最后,
发现这个curl的 -X参数有点意思,也就是在http的头里加上PUT,GET,DELETE:
PUT http://192.168.109.7:21211/key
GET http://192.168.109.7:21211/key
DELETE http://192.168.109.7:21211/key
key就是键值,而这个传入PUT时的form有键无值,这个键就是存入ttserver的值,通过GET及DELETE能够对这个存入的ttserver值进行各种操作。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/6727/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2014-8-25 10:52
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]