前言:

最近用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

但是提示错误~

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

1
yum install libevent-devel
1
yum install redis

redis server 的启动 !

编译文件及启动webdis~

简单的测试下哈~

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"}

webdis还支持post的方式 ~

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的格式 ~

下面是json的格式 ~

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 是支持文件上传的~

上传文件~

查看上传好的页面 ~

对于二进制文件的上传 ~

上传 ~

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

查看长传的情况 ~

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

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

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

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

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秒解决 ~没有报错的~

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

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

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

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

总结:

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

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

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

  1. 【redis】redis实现API接口调用调用次数的限制

    redis实现API接口调用调用次数的限制 参考地址:https://bbs.csdn.net/topics/391856106?page=1 参考地址:https://www.cnblogs.com ...

  2. 监控最佳实践--redis及业务接口

    简介:监控最佳实践--redis及业务接口 1. 背景 1.1 问题 2020-12-04,客户侧redis集群版监控DB0 CPU突增至100%,导致数据库无法正常服务,经排查客户侧业务上存在2M左 ...

  3. Redis实现计数器---接口防刷---升级版(Redis+Lua)

    [前言] Cash Loan(一):Redis实现计数器---接口防刷  中介绍了项目中应用redis来做计数器的实现过程,最近自己看了些关于Redis实现分布式锁的代码后,发现在Redis分布式锁中 ...

  4. Redis限流接口防刷

    Redis限流接口防刷 Redis 除了做缓存,还能干很多很多事情:分布式锁.限流.处理请求接口幂等性...太多太多了- 大家好,我是llp,许久没有写博客了,今天就针对Redis实现接口限流做个记录 ...

  5. 第四课 实战go语言改造php仿优酷-Redis改造优化接口

    第四课 实战go语言改造php仿优酷-Redis改造优化接口 tags: Beego 慕课网 categories: redis 文章目录 第四课 实战go语言改造php仿优酷-Redis改造优化接口 ...

  6. C#session共享+redis_Shiro权限管理框架(二):Shiro结合Redis实现分布式环境下的Session共享...

    精品推荐 国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布! Docker快速手上视频教程(无废话版)[免费] 作者:夜月归途 转载自: https://www.cnblo ...

  7. springboot 接口返回数据时 net.sf.json.JSONNull[“empty“]) 异常

    springboot 接口返回数据时 net.sf.json.JSONNull["empty"]) 异常 参考文章: (1)springboot 接口返回数据时 net.sf.js ...

  8. SSM中通过okhttp3向接口发送xml格式的请求参数

    场景 在SSM项目中的后台Controller中需要想asp的接口发送xml格式的请求参数. 依据接口文档示例代码. 入参: <Request><ServiceCode>get ...

  9. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    转载自  Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 一.Session共享使用tomcat-cluster-redis-session-mana ...

最新文章

  1. three.js 调用网络摄像头
  2. 艾伟也谈项目管理,谈谈如何说“不”
  3. c语言用两个栈构造队列伪码,数据结构习题线性表栈队列.doc
  4. iqueryable怎么进行操作_钢结构施工要点有哪些?怎么进行操作?
  5. 新手引导动画的4种实现方式
  6. Java黑皮书课后题第5章:*5.46(倒排一个字符串)编写一个程序,提示用户输入一个字符串,然后以反序显示该字符串
  7. Windows 7 蓝屏代码大全 amp; 蓝屏全攻略
  8. android popupwindow 调用方法,Android PopUpWindow使用详解
  9. 2020,国产数据库崭露峥嵘的发轫之年
  10. python复制文件到指定文件夹_python 拷贝文件夹下所有的文件到指定文件夹(不包括目录)...
  11. 单例模式2014-12
  12. BZOJ35453551[ONTAK2010]Peaks——kruskal重构树+主席树+dfs序+树上倍增
  13. WiFi图标在任务栏里不见了,提示:适配器Qualcomn Atheros QCA9377 Wireless Network Adapter遇到驱动程序或硬件相关的问题
  14. Activiti6记录
  15. ffmpeg处理YUV422和YUV420P相互转换
  16. ISO27001体系的价值(详解)
  17. WINDOW端口查看命令
  18. VMware Fusion 虚拟网络配置
  19. 痛苦的evo安装之旅,终于成功了
  20. stm32毕业设计 单片机火灾报警系统

热门文章

  1. Java中的一些基本转换
  2. Google C++ style guide——命名约定
  3. 使用 .NET 平台,如何玩转 Universal Windows 应用?
  4. Android 学习 笔记_09. WIFI网络操作
  5. APUE读书笔记-04文件和目录(5)
  6. Android 十大调试方法
  7. android Linkify的用法
  8. 补天五星计划范围更新,还有单个漏洞额外10000元现金奖励?!
  9. MapReduce精髓
  10. Python简单的多线程demo:装逼写法