项目网址:http://code.google.com/p/llserver/
使用环境:Linux
作者:代震军
目前发布版本:1.0
其支持http协议和memcached协议。也就是可以通过浏览器或现有的memcached客户端来进行数据的CURD操作。
下面简单介绍一下如何安装使用LLServer。
LLServer 编译安装:
1.安装libevent2.0
ulimit -SHn 65535
wget http://monkey.org/~provos/libevent-2.0.12-stable.tar.gz
tar zxvf libevent-2.0.12-stable.tar.gz
cd libevent-2.0.12-stable/
./configure --prefix=/usr
make && make install
cd ../
2.通过svn:客户端下载leveldb 到本地leveldb文件夹,链接:http://leveldb.googlecode.com/svn/trunk/
或暂时用我这个打好包的地址下载:
wget http://llserver.googlecode.com/files/leveldb.tar.gz
tar zxvf leveldb.tar.gz
之后编译安装
3.LLServer下载地址:cd leveldb/
make -f Makefile
cp libleveldb.a /usr/local/lib/
cp -rf include/* /usr/local/include/
cd ../
4、LLServer 使用文档:wget http://llserver.googlecode.com/files/llserver-1.0.tar.gz
tar zxvf llserver-1.0.tar.gz
cd llserver/
make -f Makefile
make install
cd ../
[root@~]# llserver -h
-l <ip_addr> 监听的IP地址,默认值为 0.0.0.0
-p <num> 监听的TCP端口(默认值:11211)
-x <path> 数据库目录,目录不存在会自动创建(例如:/llserver/data)
-c 数据缓存队列单位,默认为100m
-t <second> HTTP请求的超时时间
-s 1:http协议 other:memcached协议
-d 以守护进程运行
-h 显示帮助
使用示例:
HTTP GET 协议(以curl命令为例):
curl "http://127.0.0.1:11211/?opt=set &charset =utf-8 &key =username &value =daizhj &exptime =(unix时间戳,设置有效期)"
HTTP POST 协议(以curl命令为例):
打开浏览器:
如果set成功,返回:LLServer_SET_OK
如果set失败,返回:LLServer_SET_ERROR
获取数据:
HTTP GET 协议(以curl命令为例):
curl "http://127.0.0.1:11211/?opt=get&charset=utf-8&key=username"
打开浏览器:
如果get成功,返回相应数据信息
如果get失败,返回:LLServer_GETKEY_ERROR
删除数据:
HTTP GET 协议(以curl命令为例):
curl "http://127.0.0.1:11211/?opt=delete&key=username"
打开浏览器:
如果delete成功,返回:LLServer_DELETE_OK
如果delete失败,返回:LLServer_DELETE_ERROR
删除全部数据:
HTTP GET 协议(以curl命令为例):
curl "http://127.0.0.1:11211/?opt=deleteall&key=username"
打开浏览器:
如果delete成功,返回:LLServer_DELETEALL_OK
如果delete失败,返回:LLServer_DELETEALL_ERROR
使用telnet链接示例(基于memcached协议):
set操作:
client => set username 0 0 6
daizhj
llserver=> STORED
get操作:
client=> get username
llserver=> daizhj
delete操作:
client=> delete username
llserver=> DELETED
quit:
client=> quit
llserver=> close client_fd
version:
client=> version
llserver=>1.0
客户端 C#源码包:
1.这里将Discuz!NT使用的memcached 客户端(已修改过部分代码),大家可以使用它(支持链接池)来直接访问LLServer,相应的示例在压缩包的MemcachedApp\MemcachedApp\sample\sample_1.aspx中。
下载地址:http://files.cnblogs.com/daizhj/MemcachedApp_llserver.rar
2.当然也可以使用c#的httpwebrequest来直接访问,比如(代码源自discuz!nt):
{
/// <summary>
/// http POST请求url
/// </summary>
/// <param name="url"> 请求的url链接 </param>
/// <param name="method"> 方法名称,如"POST", "GET" </param>
/// <param name="postData"> 方法名称为"POST"时,所有提交的数据 </param>
/// <returns></returns>
public static string GetHttpWebResponse( string url, string method, string postData)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = method;
request.ContentType = " application/x-www-form-urlencoded " ;
request.ContentLength = string .IsNullOrEmpty(postData) ? 0 : postData.Length;
// request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
request.Timeout = 60000 ;
HttpWebResponse response = null ;
try
{
if ( ! string .IsNullOrEmpty(postData))
{
StreamWriter swRequestWriter = new StreamWriter(request.GetRequestStream());
swRequestWriter.Write(postData);
if (swRequestWriter != null )
swRequestWriter.Close();
}
response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
catch
{
return null ;
}
finally
{
if (response != null )
response.Close();
}
}
// 这里发送请求并返回数据
string result = GetHttpWebResponse( " http://127.0.0.1:11211/?opt=get&charset=utf-8&key=username " , " GET " , null );
}
当然你可也以用其它语言的memcached客户端来访问LLServer,不过有一点要说明的是,目前llserver只存储序列化的字符串对象,如果你的数据为泛型或数组等类型,请先序列化之后再进行存储。
还有就是在c#里可以对数据进行二进制序列化,这里必须将序列化后的对象进行base64位编码之后再存储,否则会报异常,切记。
http://blog.nosqlfan.com/html/2882.html LevelDB内部实现
原文链接:http://www.cnblogs.com/daizhj/archive/2011/08/23/2150422.html
作者: daizhj, 代震军
微博: http://weibo.com/daizhj
Tags: libevent,leveldb,llserver,key/value db