ccw5510

导航

TokyoTyrant 队列服务器

  Tokyo Tyrant最常用的功能就是提供key->value的数据存储服务,再加上Tokyo Tyrant的lua语言扩展就可以实现很多适合自己需求的功能,例如:定时清理缓存数据(ttserver本身并不去管数据的过期时间,当然它采用的是磁盘存储,可以有很大的空间用来存放数据,不必去管数据的过期);session服务器;队列服务器;记数器等等!

  下面就来说一说,如何用Tokyo Tyrant构建一个队列服务器:

  1. 安装

#安装 Tokyo Cabinet

wget http
://1978th.net/tokyocabinet/tokyocabinet-1.4.45.tar.gz
tar zxvf tokyocabinet-1.4.45.tar.gz
cd tokyocabinet
-1.4.45
./configure --enable-off64
#32位系统需要 --enable-off64,以让它支持大于2GB的文件
make
make install

cd 
../

#ttserver运行时,支持一些扩展脚本,这里采用lua脚本,所以需要lua的支持,安装 lua
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zxvf lua-5.1.4.tar.gz
cd lua
-5.1.4.tar.gz
#要根据系统而定,直接make它会有提示
make linux
make install
ln 
-/usr/local/bin/lua /usr/bin/lua

cd 
../
#安装Tokyo Cabinet 的 lua 扩展
wget http://1978th.net/tokyocabinet/luapkg/tokyocabinet-lua-1.9.tar.gz
tar zxvf tokyocabinet-lua-1.9.tar.gz
cd tkoyocabinet
-lua-1.9.tar.gz
./configure
make
make install

cd 
../

//安装 Tokyo Tyrant
wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.40.tar.gz
tar zxvf tokyotyrant-1.1.40.tar.gz
./configure --enable-lua --with-lua
make
make install

cd 
../

 

  2. 配置

  在 tokyo tyrant 的源码目录下有一个 ext 文件夹,里面存放的就是一些 lua 扩展脚本,queue.lua 就是用来提供队列服务的,这里我将 queue.lua 复制到 /etc/ttserver 里面去,打开该脚本,里面提供三个函数,主要是:

  enqueue(key, value),进队列,key为队列名称,value为队列值。

  dequeue(key, max),出队列,key为队列名称,max为每次从队列中取出多少条记录。

  queuesize(key),队列的长度,key为队列名称。

  3. 启动

#ttserver -host 127.0.0.1 -port 11221 -thnum 8 -dmn -pid /data/ttserver/my_queue/ttserver.pid -log 
/data/ttserver/my_queue/ttserver.log -le -ulog /data/ttserver/my_queue/ -ulim 32m -sid 1 -rts 
/data/ttserver/my_queue/ttserver.rts -ext /etc/ttserver/queue.lua 
/data/ttserver/my_queue/database.tch

 

 

 TokyoTyrant 队列服务器

  启动参数说明可以参考这里:http://blog.s135.com/post/362/

   4. 测试

  向队列服务器里插入一条记录,my_queue为队列名,hello是记录值。如果插入成功就会返回:ok

#tcrmgr ext 127.0.0.1:11221 enqueue my_queue hello

 

   从队列服务器里取出一条记录,my_queue为队列名,1为只取一条记录。返回队列头部的第一条记录值。

#tcrmgr ext 127.0.0.1:11221 dequeue my_queue 1

 

 TokyoTyrant 队列服务器

  5. 客户端访问

  一般在web中有很多需要用到队列的地方,刚好,演示一下如何用tokyo tyrant为PHP提供队列服务。

  我这里用到的是PHP版本的 tokyo tyrant 客户端,如果想用so版本的,就需要去 http://pecl.php.net/package/tokyo_tyrant 下载后编译安装,这里我以 php 版的客户端测试。

  循环向队列写入100条记录,并一次取出10条记录,代码如下:

<?php
include('Tyrant/Tyrant.php');

$tt = Tyrant::connect('127.0.0.1', '11221');

for($i=1$i<=100$i++)
{
    
$tt->ext('enqueue', 'my_queue', $i, 0);
}

var_dump($tt->ext('dequeue', 'my_queue', 10, 0));

//上面ext方法的最后一个参数0,为是否开启锁机制,还有下面两个值可选:
//一个相当于行锁,一个相当于表锁,一般第一个就够用了
//Tyrant::XOLCKREC for record locking
//Tyrant::XOLCKGLB for global locking

?>

 

 运行结果:

 TokyoTyrant 队列服务器

  返回的值是一个字符串,每条记录之间用"\n"分隔,最后也有一个"\n"。

  接着再通过 tcrmgr 去队列中取出10条记录:

TokyoTyrant 队列服务器

  队列服务器搭建完毕,以ttserver一直以来的表现,效率方面应该不是问题,这里我也没有进行大量的这方面的测试。

 

http://www.xhttp.cn/2010/09/24 

posted on 2010-09-27 22:38  ccw5510  阅读(757)  评论(0编辑  收藏  举报