webdis实现Redis的http接口及多数据格式共享 [含json,restful]

简介:

前言:

最近用tornado写了redis的接口,为自己的做cs之间的数据中转,以及后期给别部门的临时数据调用。这些东西难度真不大,但是很杂乱,还要保证性能。

朋友推荐了我这款redis的http的服务端利器,要功能他有,要性能他也有。。。


webdis是一个简单的 Web 服务器,提供了 HTTP 接口来访问 Redis 服务器,使用了 hiredis, jansson, libevent, and http-parser 等软件。


Redis 一直以来只提供纯文本操作协议(只有在 Cluster 中应用了二进制协议),这可能令很多推崇 RESTFul 的同学感觉不爽了,最近,一位名叫高手的同学业余开发了一个支持 HTTP 协议的 Redis Proxy,取名Webdis。其在Redis 的讨论区一发布,则引来一遍赞扬之声。(鼓掌!!!)

开始:

项目地址:https://github.com/nicolasff/webdis/


1
2
3
4
5
git clone git: / / github.com / nicolasff / webdis.git
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
cd webdis
make
. / webdis &


配置webdis

233334840.jpg

但是提示错误~

为了彻底点,咱们把主要的开发包都搞下,redis-server也配置下 ~

1
yum install libevent-devel

1
yum install redis


233609998.jpg

redis server 的启动 !

233158438.jpg

编译文件及启动webdis~

234030695.jpg

简单的测试下哈~

1
2
3
4
5
6
curl http: //127.0.0.1:7379/SET/hello/world
→ { "SET" :[ true , "OK" ]}
curl http: //127.0.0.1:7379/GET/hello
→ { "GET" : "world" }
curl -d  "GET/hello"  http: //127.0.0.1:7379/
→ { "GET" : "world" }


235450639.jpg

webdis还支持post的方式 ~


110230744.png

webdis支持很多的格式:

1
2
3
4
5
6
7
8
9
10
.json  for  application/json ( this  is  the  default  Content-Type).
.msg  for  application/x-msgpack. See http: //msgpack.org/ for the specs.
.txt  for  text/plain
.html  for  text/html
xhtml  for  application/xhtml+xml
xml  for  text/xml
.png  for  image/png
jpg or jpeg  for  image/jpeg
Any other  with  the ?type=anything/youwant query string.
Add a custom separator  for  list responses  with  ?sep=, query string.


下面是txt的格式 ~


235924823.jpg

下面是json的格式 ~

000041223.jpg


webdis也可以直接上传文件的 ~

1
2
Webdis supports file upload using HTTP PUT. The command URI  is  slightly different,  as  the last argument  is  taken from the HTTP body. For example: instead of /SET/key/value, the URI becomes /SET/key and the value  is  the entirety of the body. This works  for  other commands such  as  LPUSH, etc.
webdis 是支持文件上传的~


上传文件~

000932745.jpg

查看上传好的页面 ~

001036452.jpg

对于二进制文件的上传 ~

上传 ~

我上传了一个nginx文件,下载成一个nginx rpm文件 ~

002136470.jpg

查看长传的情况 ~

002513465.jpg

但是有个极大的问题是,二进制的文件不能太大 ~

咱们测试下在速度快的情况下他的大小能到多少~ 5.3m 没啥压力~速度很快 ~

003416398.jpg

我测试了100M左右的文件~ 速度还算可以~ 在3.1s秒左右~

大小就这样了,这算是个小应用,可以做共享数据的时候,也能搞搞数据文件啥的,但是没有共享数据的应用,估计就没人这么蛋疼用redis存文件。

004148549.jpg


webdis 也是支持ACL的,来源的ip地址限制以及基本认证的方式 !


webdis.json是webdis的配置文件 ~


这个可以配置webdis连接后端时候的所需要的信息,以及自己的配置信息。

哎呀~ 居然还有多线程和线程池的配置~ 不错不错 !!!

1
2
3
4
5
6
7
8
9
10
"redis_host" :    "127.0.0.1" ,
"redis_port" :    6379 ,
"redis_auth" :    null ,
"http_host" :     "0.0.0.0" ,
"http_port" :     7379 ,
"threads" :       5 ,
"pool_size" :  20 ,
"daemonize" :     false ,
"websockets" :    false ,
"database" :      0


下面是安全的信息~ 基本认证,ip地址的限制 ~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
     "disabled" : [ "DEBUG" ,  "FLUSHDB" ,  "FLUSHALL" ],
},
{
     "http_basic_auth" :  "user:password" ,
     "disabled" : [ "DEBUG" ,  "FLUSHDB" ,  "FLUSHALL" ],
     "enabled" :  [ "SET" ]
},
{
     "ip" :        "192.168.10.0/24" ,
     "enabled" :  [ "SET" ]
},
{
     "http_basic_auth" :  "user:password" ,
     "ip" :        "192.168.10.0/24" ,
     "enabled" :  [ "SET" ,  "DEL" ]
}


webdis还有个websocket的模式~


1
2
3
4
5
6
7
8
9
10
11
12
function  testJSON() {
     var  jsonSocket =  new  WebSocket( "ws://127.0.0.1:7379/.json" );
     jsonSocket.onopen =  function () {
         console.log( "JSON socket connected!" );
         jsonSocket.send(JSON.stringify([ "SET" ,  "hello" ,  "world" ]));
         jsonSocket.send(JSON.stringify([ "GET" ,  "hello" ]));
     };
     jsonSocket.onmessage =  function (messageEvent) {
         console.log( "JSON received:" , messageEvent.data);
     };
}
testJSON();


我们开始来个简单的性能测试吧~ (我原本想用gevent和curllib2来测试,但是没找到以前写过的demo例子。。。只能简单用ab来测试啦~)

10000个请求用了不到3秒解决 ~没有报错的~

010225198.jpg

又测试了一遍~ (我晕,居然又到1.8啦~ )

010559980.jpg

他的cpu情况,每个内核都有跑,每个核心都在有效的利用~ 不像python,nodejs那样只能单核的跑~

011013912.jpg


好嘞~ 就介绍这里啦~~~ 希望这webdis 越来越好,github里有不少人fork他的代码,issue里面也是很热乎的~

我现在尽量用这个做redis的http,而不是像以前python自己写了。

总结:

webdis是个很方便的redis http接口程序~ 推荐大家使用~ 前提是你懒得自己写http的接口 ~



 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1320624,如需转载请自行联系原作者



相关文章
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
JSON API 数据格式
淘宝关键词搜索API接口,json数据返回
淘宝关键词搜索API接口允许开发者通过关键词检索商品,并返回符合条件的商品信息,这些信息通常以JSON格式呈现。以下是一个淘宝关键词搜索API接口返回的JSON数据示例及关键字段说明
|
JSON Java 数据库连接
怎样用 esProc 计算来自 Restful 的多层 json 数据
esProc 是一款强大的数据处理工具,可简化 Java 处理 Restful 接口返回的复杂多层 JSON 数据的难题。通过 esProc,不仅能轻松访问和解析 Restful 数据,还能高效完成复杂计算任务,并可无缝嵌入 Java 应用中作为计算引擎使用。例如,筛选特定分类订单或计算金额,esProc 的脚本简洁直观,远优于传统 SQL 或纯 Java 实现。此外,esProc 支持安全认证(如 Cookie 和 Token)及 JDBC 集成,为开发者提供灵活高效的解决方案。
|
存储 JSON 安全
商品详情(item getAPI接口)json数据格式参考
某东商品详情(item get API接口)的JSON数据格式参考如下
|
消息中间件 JSON NoSQL
从 ES Kafka Mongodb Restful ... 取到 json 之后
JSON 是一种广泛使用的数据交换格式,但其计算和处理能力有限。esProc SPL 是一款强大的开源计算引擎,能够高效解析 JSON 数据,并支持复杂的过滤、分组、连接等操作。它不仅兼容多种数据源,如 RESTful、ElasticSearch、MongoDB 和 Kafka,还提供了游标对象处理大数据流,支持与 Java 应用无缝集成,实现灵活的业务逻辑处理。
|
JSON API 数据格式
商品详情(item getAPI接口)json数据格式参考
淘宝商品详情(item get API接口)返回的JSON数据格式是一个复杂且灵活的结构,包含多个字段和对象。以下是一个简化的JSON数据格式参考:
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
JSON API 数据格式
店铺所有商品列表接口json数据格式示例(API接口)
当然,以下是一个示例的JSON数据格式,用于表示一个店铺所有商品列表的API接口响应
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?

热门文章

最新文章