设为首页 收藏本站
查看: 2672|回复: 0

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

[复制链接]

尚未签到

发表于 2018-11-7 09:55:17 | 显示全部楼层 |阅读模式
  前言:
  最近用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/
git clone git://github.com/nicolasff/webdis.git  
cd webdis
  
make
  
./webdis &
  配置webdis
DSC0000.jpg

  但是提示错误~
  为了彻底点,咱们把主要的开发包都搞下,redis-server也配置下 ~
yum install libevent-develyum install redis
DSC0001.jpg

  redis server 的启动 !
DSC0002.jpg

  编译文件及启动webdis~
   DSC0003.jpg
  简单的测试下哈~
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"}
DSC0004.jpg

  webdis还支持post的方式 ~
DSC0005.png

  webdis支持很多的格式:
.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的格式 ~
DSC0006.jpg

  下面是json的格式 ~
DSC0007.jpg

  webdis也可以直接上传文件的 ~
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 是支持文件上传的~
  上传文件~
DSC0008.jpg

  查看上传好的页面 ~
DSC0009.jpg

  对于二进制文件的上传 ~
  上传 ~
  我上传了一个nginx文件,下载成一个nginx rpm文件 ~
DSC00010.jpg

  查看长传的情况 ~
DSC00011.jpg

  但是有个极大的问题是,二进制的文件不能太大 ~
  咱们测试下在速度快的情况下他的大小能到多少~ 5.3m 没啥压力~速度很快 ~
DSC00012.jpg

  我测试了100M左右的文件~ 速度还算可以~ 在3.1s秒左右~
  大小就这样了,这算是个小应用,可以做共享数据的时候,也能搞搞数据文件啥的,但是没有共享数据的应用,估计就没人这么蛋疼用redis存文件。
DSC00013.jpg

  webdis 也是支持ACL的,来源的ip地址限制以及基本认证的方式 !
  webdis.json是webdis的配置文件 ~
  这个可以配置webdis连接后端时候的所需要的信息,以及自己的配置信息。
  哎呀~ 居然还有多线程和线程池的配置~ 不错不错 !!!
"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地址的限制 ~
{  "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的模式~
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秒解决 ~没有报错的~
DSC00014.jpg

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

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

  好嘞~ 就介绍这里啦~~~ 希望这webdis 越来越好,github里有不少人fork他的代码,issue里面也是很热乎的~
  我现在尽量用这个做redis的http,而不是像以前python自己写了。
  总结:
  webdis是个很方便的redis http接口程序~ 推荐大家使用~ 前提是你懒得自己写http的接口 ~



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-631825-1-1.html 上篇帖子: Redis 安装,主从配置及Sentinel配置自动Failover 下篇帖子: redis相关知识(五)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表