mem-cli

一个交互式命令行的memcache客户端

作者 Fandy 日期 2015-11-30
mem-cli

一个交互式命令行的memcache客户端。

安装

本项目基于 node.jsnpm, 如果你尚未安装node.js, 请至官网获取安装方式。

1
$ npm install -g mem-cli

-g参数用于全局安装,这样你可以在任意目录执行mem-cli

本地安装方式如下:

下载mem-cli到某个目录,并且调试代码,请执行以下命令

1
2
$ npm install
$ ./bin/mem-cli

关于

这是一个基于node.js的简单的memcache客户端,采用交互式命令行模式运行。

Memcache和Redis同样为基于内存的非关系型数据库,但是和Redis较为齐全的工具相比,Memcache的工具链就有点拿不出手的意思了。Memcache只能通过telnet命令与memcached服务器交互,命令格式如下,

1
<command name> <key> <flags> <exptime> <bytes>\r\n <data block>\r\n

我就执行一个get、set,却让我加如此复杂的参数,不能忍,这就是我的一次操作记录。

telnet

你能感受到我输入quit时候的绝望么,下面开始吐槽!!!

  • telnet输入的命令居然不能删除或回退,这对于手残党来说,完全无法忍受。
  • telnet操作memcache还需要设置很多无需关心的参数
  • telnet执行命令后的显示结果很不人性化

作为程序猿,遇到这种无法忍受的问题,就果断自己动手解决了。刚好最近在看node.js,开发交互式命令行程序可以使用node.js原生提供的 REPL 模块,解析命令行参数可以使用 argv 模块,连接memcached服务器,有memcache 模块,万事俱备,开始动手。

特性

暂且支持如下功能:

  • get
  • set
  • keys
  • stats

内置命令支持

目前额外支持这两个内置命令:

  • keys * – 列出所有memcache的key
  • stats – 显示memcache服务器的状态数据

源码

假如你想测试代码,请使用本地安装方式,并且使用require函数引入源码,假如你有test.js, 请加入如下代码:

1
2
3
4
5
var MemcacheClient = require('./lib/client');

MemCli = new MemcacheClient();

MemCli.start();

执行测试代码

1
2
▸ test.js
memcache 192.168.1.73:12001 >

使用

查看帮助信息

1
$ mem-cli --help

连接远程memcache客户端

1
$ mem-cli -h [remote host] -p [port]

获取mem-cli的版本

1
2
$ mem-cli -v
0.0x

mem-cli对memcache的一些操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$  mem-cli -h 192.168.1.73 -p 12002
memcache 192.168.1.73:12002 >
▸ get key
"value"
▸ set key new_value
STORED
▸ keys *
"key"
"key1"
"key2"
"key3"
"key4"
▸ stats
...

退出命令行

1
2
3
4
$  mem-cli -h 192.168.1.73 -p 12002
memcache 192.168.1.73:12002 >.exit
mem-cli closed. bye!
$

尾声

发起这个项目的原因,在 关于 章节里有描述,这个简单的客户端程序花了3天时间写完,现在已经发布到 npm 和 github ,欢迎安装使用和提交issues ,目前版本是0.04。

这是我的第一个开源项目,在开发这个项目的过程中,学到了很多东西,比如npm如何开发并且发布一个包,如何发布代码到github,这里吐槽一下npm的包管理,随便提交一点代码就要修改一下版本号,感觉不是很人性化。

未来支持特性

这个项目未来会继续优化完善,做到类似redis-cli,未来加入的特性如下:

  • 加入反序列化解析器
  • 加入更多服务器状态信息,如缓存命中率等

反序列化解析器是为了将存储的数据反序列化,比如PHP写入memcache,使用的序列化方式是PHP内置函数serialize,那么就需要使用js实现反序列化函数,将数据解析出来。