V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
scriptB0y
V2EX  ›  分享创造

IRedis: 一个支持语法高亮和自动补全的 Redis 命令行客户端

  •  
  •   scriptB0y ·
    laixintao · 2020-01-03 15:08:34 +08:00 · 4374 次点击
    这是一个创建于 1567 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果你像我一样,比起 Redis 的各种 GUI 客户端,更喜欢命令行客户端的话,可以试试我写的 IRedis。

    安装: pip install iredis

    Source code: https://github.com/laixintao/iredis/

    目前支持以下 Feature:

    • Ctrl - C 取消当前命令,Ctrl - D 退出;
    • 选择历史命令(类似 fish );
    • 自动补全 Redis 命令;
    • 以及根据历史的参数补全命令的参数,比如之前使用了一个 key,或者 keys * 命令返回了 key 列表。当下次输入 SET 命令的时候,会根据 LRU 的逻辑自动补全 key ;
    • 在最底下的状态栏提示命令的用法,可使用的 Server 版本,时间复杂度等等;
    • 不是一个全屏的 TUI 客户端,只是一个命令行客户端;

    新手模式(--newbie),友好的提示:

    image.png

    内置 HELP,可以查看命令的手册(文本来自 redis-doc):

    Screen Shot 2020-01-03 at 2.15.11 PM.png

    PUBSUB 可以解析成单行 Stream 显示,取消的时候自动发送 UNSUBSCRIBE ( redis-cli 的行为是直接退出的)

    Screen Shot 2020-01-03 at 2.19.32 PM.png

    LUA 脚本也有高亮

    Screen Shot 2020-01-03 at 2.24.10 PM.png

    可以对一些命令的 response 解析,比如 slowlog: Screen Shot 2020-01-03 at 2.23.47 PM.png

    HASH 类型也会显示成 key-value pairs,redis-cli 是直接显示成 list 的,要自己对应奇数是 key,偶数是 value。

    Screen Shot 2020-01-03 at 2.26.07 PM.png

    还有其他一些 feature,大家可以自己下载尝试。

    不足

    1. 我是用 prompt toolkit 这个库做 UI 框架的,这个库基于正则解析语法,所以在 IRedis 启动的时候,会有一个编译正则的时间(我的机器大约 8s )。正则编译结束之前,语法高亮和补全不会激活,但是 IRedis 可以和 redis-cli 一样正常使用。(虽然也有用户反映编译正则期间,打字有点卡顿,2.2GHz 的 CPU )。这个过程要编译上千个正则,我想过一些方法解决这个性能问题,现在还没解决。。。
    2. 还有 stream 相关的命令没有支持,除了 stream 其他 200 多个命令都是完美支持的;
    3. 这是一个第三方的客户端,不会比 redis-cli 跟上 redis-server 的 feature 更及时。

    但是我觉得比起 IRedis 的高亮和补全,这些不足还是可以接受的。欢迎大家帮助提建议和代码。

    7 条回复    2020-01-04 09:39:19 +08:00
    zxCoder
        1
    zxCoder  
       2020-01-03 16:51:59 +08:00
    (只会 set 和 get 的我应该用不上了
    Kilerd
        2
    Kilerd  
       2020-01-03 16:53:54 +08:00
    新手模式好评
    scriptB0y
        3
    scriptB0y  
    OP
       2020-01-03 17:43:44 +08:00 via iPhone
    @zxCoder get 和 set 也会补全 key 的呀 哈哈
    guyskk0x0
        4
    guyskk0x0  
       2020-01-03 18:53:23 +08:00 via Android
    想到个方案:正则编译后 pickle 保存到磁盘,这样第二次启动就不用编译了。或者在安装时就编译并持久化。
    scriptB0y
        5
    scriptB0y  
    OP
       2020-01-03 19:39:37 +08:00 via iPhone
    @guyskk0x0 是的 这个我也尝试了。这样的问题是,re 是 c 语言写的,load 二进制本身开销就很大了,我发现 load 的速度跟编译的速度是一样的……
    deplives
        6
    deplives  
       2020-01-03 21:32:50 +08:00 via iPhone
    有种 mycli 的感觉 先反手给个赞
    scriptB0y
        7
    scriptB0y  
    OP
       2020-01-04 09:39:19 +08:00 via iPhone
    @deplives 用的是同一个补全框架
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1001 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:30 · PVG 03:30 · LAX 12:30 · JFK 15:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.