惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
N
News and Events Feed by Topic
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
H
Heimdal Security Blog
Schneier on Security
Schneier on Security
Engineering at Meta
Engineering at Meta
Google Online Security Blog
Google Online Security Blog
宝玉的分享
宝玉的分享
AI
AI
The GitHub Blog
The GitHub Blog
MongoDB | Blog
MongoDB | Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Last Watchdog
The Last Watchdog
T
Troy Hunt's Blog
S
Security @ Cisco Blogs
H
Hacker News: Front Page
F
Fortinet All Blogs
博客园_首页
S
Secure Thoughts
N
News and Events Feed by Topic
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
Spread Privacy
Spread Privacy
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Hugging Face - Blog
Hugging Face - Blog
Hacker News: Ask HN
Hacker News: Ask HN
C
CXSECURITY Database RSS Feed - CXSecurity.com
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
L
LINUX DO - 最新话题
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Schneier on Security
Know Your Adversary
Know Your Adversary
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Scott Helme
Scott Helme
P
Privacy & Cybersecurity Law Blog
S
Securelist
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
O
OpenAI News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
PCI Perspectives
PCI Perspectives
L
LangChain Blog
雷峰网
雷峰网
Security Archives - TechRepublic
Security Archives - TechRepublic
V2EX - 技术
V2EX - 技术

博客园 - 代震军

重磅发布码农界的第一张吉他专辑小样 HRPlugin For Xcode发布(附源码地址) 当C++遇到iOS应用开发---LRUCache缓存 当C++遇到iOS应用开发---Dict集合 当C++遇到iOS应用开发之---List集合 当C++遇到iOS应用开发---字符串处理 当C++遇到iOS应用开发---SQLITE篇 开源ImageFilter库For IOS源码发布 开源ImageFilter库v0.4:新增26种图片效果 开源ImageFilter库v0.3:新增22种图片效果 开源ImageFilter库v0.2:新增7类滤镜,支持12种图片效果 Android, WindowsPhone7, IOS ,vc2010平台40多套图片滤镜开源 Discuz!NT中的LLServer架构设计 Mongodb源码分析--Replication之OpLog Mongodb源码分析--Replication之主从模式--Slave 这样的“牛”人最好别碰上 Mongodb源码分析--Replication之主从模式--Master Mongodb源码分析--链接池(ConnPool) Mongodb源码分析--Mongos之分布式锁
LLServer1.0及C#客户端正式发布并开源
代震军 · 2011-08-23 · via 博客园 - 代震军

    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://lnamp-web-server.googlecode.com/files/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.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中。
     下载地址:https://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