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

长平狐 发布于 2012/11/06 18:40
阅读 65
收藏 0
    LLServer是本人基于libevent和leveldb这两个开源软件,开发的轻量级数据存储服务器软件,借助libevent高效网络接口实现对leveldb的访问封装。
   
    项目网址: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 --fix=/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
    之后编译安装  
cd leveldb/    
make -f Makefile   
cp libleveldb.a /usr/local/lib/
cp -rf include/* /usr/local/include/
cd ../
    
    3.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 ../
 
    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 -l 127.0.0.1 -p 11211  -d -s 1 -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 -l 10.0.4.188 -p 11211  -d -s 2 -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):

namespace  Discuz.Common
{
    
///   <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/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
  
 

 


    
 

 


原文链接:http://www.cnblogs.com/daizhj/archive/2011/08/23/2150422.html
加载中
返回顶部
顶部