LLServer1.0及C#用戶端正式發布並開源

來源:互聯網
上載者:User
    LLServer是本人基於libevent和leveldb這兩個開源軟體,開發的輕量級資料存放區伺服器軟體,藉助libevent高效網路介面實現對leveldb的訪問封裝。
   
    項目網址:http://code.google.com/p/llserver/
  使用環境:Linux
  作者:代震軍
  目前發布版本:1.0
 
  其支援http協議和memcached協議。也就是可以通過瀏覽器或現有的memcached用戶端來進行資料的CURD操作。
    下面簡單介紹一下如何安裝使用LLServer。   
 
    LLServer 編譯安裝:
     1.安裝libevent2.0ulimit -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
    之後編譯安裝   cd leveldb/    
make -f Makefile   
cp libleveldb.a /usr/local/lib/
cp -rf include/* /usr/local/include/
cd ../

    
    3.LLServerwget 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
  

 

 

    
 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.