首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  Redis

[诚心求问]小白想问一个有关 nc 连接 redis-server 的问题

  •  1
     
  •   zazalu · 124 天前 · 6163 次点击
    这是一个创建于 124 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在学习 redis 的过程中,我了解到了可以使用 nc 命令来连接 redis-server, 直接打开一个 TCP 连接来交互数据,获取 redis 的返回

    但是我又从相关书籍上了解到, redis 的数据交互需要遵照 RESP 协议,

    意思就是说我们发送`set hello world` , 这是不符合 RESP 协议的格式的, redis 没法理解的(?), 需要改为

    ```
    *3
    $3
    set
    $5
    hello
    $5
    world

    ```

    如果从这个角度出发, 为什么 nc 工具发送的数据, redis 可以处理并返回呢? 比如如下案例

    ```
    //连接
    nc 127.0.0.1 6379

    //发送一条 redis 指令(没有符合 RESP 协议规定的格式)
    set hello world

    //redis 返回
    +OK

    ```

    由于我知识匮乏, 尝试多次 google, 比如

    1. 为什么 nc 连接 redis, 发送的数据不符合 RESp, redis 却可以理解并返回
    2. nc 发起的 TCP 连接,默认使用的是什么应用层协议.
    ...

    这些关键字的查询结果都不是我想要的 T T

    所以我想希望 v2 的前辈们, 可以帮助我, 这个地方有个我知识的断层区, 心里很难受.
        1
    zazalu   124 天前
    诚心求问, 已经自己查了很多资料了, 但是都没有点到我问的这个点上. 计算机网络 TCP 那块我也翻了... 真心希望有前辈可以指点下
        2
    momocraft   124 天前
    那就是 tcp 连接(字节流)没有应用层协议

    我看到有人 telnet redis 写文本命令也成功的,也许 redis 就是理解
        3
    jybox   124 天前   ♥ 1
        4
    40huo   124 天前   ♥ 1
    Redis also accepts commands in a special way that is designed for humans, and is called the inline command format.

    也支持 line based
        5
    julyclyde   124 天前
    本来就理解
    你说的那个格式是应答格式
        6
    zazalu   124 天前
    @jybox 好像并没有写 nc 的情况啊..

    `Clients send commands to the Redis server using RESP Arrays`

    这个 RESP Arrays 就是我说的格式, 但是 nc 发送数据 没有按照这个格式也能回复正确

    总之谢谢回复..

    我发现我按照 RESP 格式发送数据, redis 反而懵逼了, 算了, 这些内部机制不是自己写的不去揣测了..
        7
    zazalu   124 天前
    @40huo
    谢谢! 我懂了
    @jybox
    不好意思. 是我没仔细看, 对不起
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4266 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 09:12 · PVG 17:12 · LAX 01:12 · JFK 04:12
    ♥ Do have faith in what you're doing.