treapdb是国内个人开发者的一个开源项目,支持memcache,thrift协议。但如果使用memcache协议,就无法支持range,prefix等特性了(如果丧失这些特性,还不如直接用memcache了吧)。

thrift是apache的一个项目,支持10余种语言。也要感谢facebook的大规模使用,让更多的人知道了这个东东。

作者提供了java/python的例子,这里仅提供php的操作方法。

关于thrift的编译/php扩展的编译,就不再啰嗦了,无非都是configure/make/phpize等命令,可以参考:

http://chanian.com/2010/05/13/thrift-tutorial-a-php-client/

http://blog.csdn.net/hshxf/archive/2010/06/12/5666145.aspx

根据接口定义生成php client代码

svn checkout http://treapdb.googlecode.com/svn/trunk/res .
thrift --gen php service.txt

下面直接上测试代码

# thrift提供的client包
$GLOBALS['THRIFT_ROOT'] = '/root/Downloads/thrift-0.5.0/lib/php/src';
 
# 为了方便,直接设置为include path
set_include_path(get_include_path()
    .PATH_SEPARATOR
    .$GLOBALS['THRIFT_ROOT']);
 
# include 需要的文件
require_once 'Thrift.php';
require_once 'protocol/TBinaryProtocol.php';
require_once 'transport/TSocket.php';
require_once 'transport/TBufferedTransport.php';
 
# include生成的类
require_once './service/TreapDBService.php';
 
# 下面是测试代码
$socket = new TSocket("192.168.191.107","11811");
$transport = new TBufferedTransport($socket);
$protocol = new TBinaryProtocol($transport);
$client = new TreapDBServiceClient($protocol);
 
$transport->open();
 
# 测试get/set
$client->put('key','val1');
echo $client->get('key')."\n";
 
# 测试prefix
$prefix = $client->prefix('thing208', 10);
var_dump($prefix);

注:TSocket也支持持久连接。