LLServer1.0及C#客户端正式发布并开源


LLServer是本人基于libevent和leveldb这两个开源软件,开发的轻量级数据存储服务器软件,借助libevent高效网络接口实现对leveldb的访问封装。

项目网址:http://code.google.com/p/llserver/
  使用环境:Linux
  作者:代震军
  目前发布版本:1.0
 
  其支持http协议和memcached协议。也就是可以通过浏览器或现有的memcached客户端来进行数据的CURD操作。
下面简单介绍一下如何安装使用LLServer。

LLServer 编译安装:
1.安装libevent2.0
ulimit-SHn65535
wget http://lnamp-web-server.googlecode.com/files/libevent-2.0.12-stable.tar.gz
tarzxvflibevent-2.0.12-stable.tar.gz
cdlibevent-2.0.12-stable/
./configure--prefix=/usr
make&&makeinstall
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
之后编译安装
cdleveldb/
make-fMakefile
cplibleveldb.a/usr/local/lib/
cp-rfinclude/*/usr/local/include/
cd../

3.LLServer下载地址
wgethttp://llserver.googlecode.com/files/llserver-1.0.tar.gz
tarzxvfllserver-1.0.tar.gz
cdllserver/
make-fMakefile
makeinstall
cd../

4、LLServer 使用文档:
 [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 显示帮助

使用示例:

llserver-l127.0.0.1-p11211-d-s1-x/llserver/db0


  HTTP GET 协议(以curl命令为例):

curl"http://127.0.0.1:11211/?opt=set&charset=utf-8&key=username&value=daizhj"
curl"http://127.0.0.1:11211/?opt=set
&charset=utf-8&key=username&value=daizhj&exptime=(unix时间戳,设置有效期)"


HTTP POST 协议(以curl命令为例):

curl-d"daizhj""http://127.0.0.1:11211/?opt=set&charset=utf-8&key=username"



打开浏览器:
如果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协议):

llserver-l10.0.4.188-p11211-d-s2-x/llserver/db1

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):

namespaceDiscuz.Common
{
///<summary>
///httpPOST请求url
///</summary>
///<paramname="url">请求的url链接</param>
///<paramname="method">方法名称,如"POST","GET"</param>
///<paramname="postData">方法名称为"POST"时,所有提交的数据</param>
///<returns></returns>
publicstaticstringGetHttpWebResponse(stringurl,stringmethod,stringpostData)
{
HttpWebRequestrequest
=(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;MSIE6.0;WindowsNT5.2;.NETCLR1.0.3705;)";
request.Timeout=60000;
HttpWebResponseresponse
=null;

try
{
if(!string.IsNullOrEmpty(postData))
{
StreamWriterswRequestWriter
=newStreamWriter(request.GetRequestStream());
swRequestWriter.Write(postData);

if(swRequestWriter!=null)
swRequestWriter.Close();
}

response
=(HttpWebResponse)request.GetResponse();
using(StreamReaderreader=newStreamReader(response.GetResponseStream(),Encoding.UTF8))
{
returnreader.ReadToEnd();
}
}
catch
{
returnnull;
}
finally
{
if(response!=null)
response.Close();
}
}

//这里发送请求并返回数据
stringresult=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/2819.html LevelDB、TreeDB、SQLite3性能对比测试
 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



优质内容筛选与推荐>>
1、uninitialized_copy()效果试验
2、mysql生成百万级数量测试数据(超简单)
3、tzfile - 时区信息
4、angular7post提交的例子
5、快速、高效的学习vuex


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn