SSDB Erlang客户端

偶尔的机会接触到SSDB,下载安装后发现其简单易用,并且多个公司在使用。但Github 上找不到Erlang的客户端,便自己写了一个。

项目地址:https://github.com/kqqsysu/ssdb-erlang

SSDB网络协议

参考http://ssdb.io/docs/zh_cn/protocol.html

协议定义很简单,请求和返回都是下面的格式:

客户端通过TCP连接和SSDB通信,直接用gen_tcp.erl模块即可。

 框架

ssdb_framework

由ssdb_sup开启ssdb_pool

ssdb_pool负责维护ssdb_conn连接池,转发ssdb查询请求。ssdb_pool初始化时,开启ssdb_conn连接进程。因为ssdb_conn通过gen_server:start_link方式开启,所以当ssdb_conn进程中止时,父进程ssdb_pool会收到{‘EXIT’,From,Reason}消息。如果ssdb_pool中的sis_connect设置为1则ssdb_pool会自动重开ssdb_conn。

ssdb_conn通过TCP连接到SSDB,发送查询请求,接收返回消息并解释协议,返回结果到应用进程。为化简处理流程,ssdb_conn把请求命令缓存到from_list中,处理完一条请求后,再从from_list取下一条请求进程处理。收到的结果缓存在reply列表中,接收完结后再gen_server:reply 回请求进程。ssdb_conn中的step有3种状态:

SSDB_STEP_SIZE 读取size阶段;

SSDB_STEP_DATA 根据上一阶段获得的size大小,接收数据阶段;

SSDB_STEP_FINISH 解释完协议,可以发送下一条请求。

ssdb.erl为处理接口,所有数据库请求都通过ssdb:query接口发送。当query 请求有多个参数时需封装到列表中。返回结果参考SSDB PHP client(https://github.com/ideawu/ssdb/tree/master/api/php)作了转换,如果操作成功,则返回{ok,Result}。

使用例子:

 

注意:所有发送到SSDB中的数据都会转换为binary格式,返回数据也是binary格式,应用层要做相应的格式处理。

Erlang技术分享内容均为原创,转载请标明本文地址
本文链接:http://www.kongqingquan.com/archives/497

此条目发表在Erlang分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">