You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用net包向Redis发送info 时转义错误的正确发送方法

正确发送Redis命令的方法(解决CRLF字节错误问题)

这个问题的核心是你混淆了字符串转义序列和实际控制字符的区别:你之前写的字符串里的\r\n被当成了普通字符(也就是\、r、\、n这四个字符),所以转成字节后是5c 72 5c 6e,而Redis需要的是**回车(CR,0x0d)和换行(LF,0x0a)**这两个控制字节(对应0d 0a)。

下面给你几种正确的实现方式:

1. 直接使用双引号字符串的转义序列

Go的双引号字符串会自动解析\r和\n为对应的控制字符,这是最简洁的写法:

// 这里的\r\n会被Go编译成0x0d和0x0a字节
cmd := "info\r\n"
_, err := conn.Write([]byte(cmd))
if err != nil {
    // 处理错误逻辑
}

这种写法下,[]byte(cmd)的内容正好是你需要的69 6e 66 6f 0d 0a。

2. 手动构造字节切片

如果你想更明确地控制每个字节,可以直接指定CR和LF的十六进制值:

cmd := []byte{'i', 'n', 'f', 'o', 0x0d, 0x0a}
_, err := conn.Write(cmd)

这种方式完全绕开字符串转义的问题,直接构造目标字节序列。

3. 使用原生字符串字面量(注意换行类型)

如果你想用原生字符串(反引号包裹),需要直接写入换行,但要注意原生字符串里的换行默认是LF(0x0a),如果Redis配置允许单独用LF,也可以这么写:

// 反引号里的换行会被解析为LF字节
cmd := `info
`
_, err := conn.Write([]byte(cmd))

关键注意点

Redis的RESP协议要求所有命令必须以CRLF(\r\n)结尾,所以一定要确保发送的是这两个控制字节,而不是它们的字符表示。如果是从外部读取包含\r\n的字符串(比如配置文件或用户输入),还需要额外做转义解析(比如用strconv.Unquote),但硬编码命令的话,第一种方法是最推荐的。

内容的提问来源于stack exchange,提问作者FlagT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:40:16