Redis 协议详解与 Telnet 直接连redis
1. Redis 协议结构
1.1 RESP协议基础
- RESP (Redis Serialization Protocol):Redis 专用的序列化协议
- 文本协议:基于 ASCII 文本,可读性好
- 请求响应模式:客户端发送请求,服务器返回响应
1.2 协议数据类型结构
- 简单字符串 :以
+开头,CRLF 结尾 - 错误信息 :以
-开头,CRLF结尾 - 整数 :以
:开头,CRLF 结尾 - 批量字符串 :以
$开头,包含长度和数据 - 数组 :以
*开头,包含元素数量和内容
1.3 协议格式规则
- 所有行以
\r\n(CRLF) 结尾 - 批量字符串格式:
$<length>\r\n<data>\r\n - 数组格式:
*<count>\r\n<element1>...<elementN> - 长度值为
-1表示空值 (null)
2. Telnet 连接 Redis
2.1 连接命令
telnet 192.168.16.16 6379
2.2 连接验证
- 连接成功后显示:
Connected to 192.168.16.16 - 可以开始输入 Redis 命令
3. Redis 协议数据类型示例
3.1 简单字符串示例
客户端发送:PING
服务器响应:+PONG\r\n
3.2 错误信息示例
客户端发送:INVALID_COMMAND
服务器响应:-ERR unknown command 'INVALID_COMMAND'\r\n
3.3 整数示例
客户端发送:INCR counter
服务器响应::1\r\n
3.4 批量字符串示例
客户端发送:GET testkey
服务器响应:$5\r\nhello\r\n (表示长度为5的字符串"hello")
3.5 数组示例
客户端发送:LRANGE list 0 -1
服务器响应:*2\r\n$5\r\nhello\r\n$5\r\nworld\r\n (表示包含两个元素的数组)
4. Redis 命令操作示例
4.1 基础字符串操作
SET 命令 (使用数组格式)
*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n
GET 命令 (使用数组格式)
*2\r\n$3\r\nGET\r\n$3\r\nkey\r\n
4.2 哈希操作示例
HSET 命令
*4\r\n$4\r\nHSET\r\n$4\r\nhash\r\n$4\r\nfield\r\n$5\r\nvalue\r\n
HGETALL 命令
*2\r\n$7\r\nHGETALL\r\n$4\r\nhash\r\n
4.3 列表操作示例
LPUSH 命令
*3\r\n$5\r\nLPUSH\r\n$5\r\nmylist\r\n$5\r\nvalue\r\n
LRANGE 命令
*4\r\n$6\r\nLRANGE\r\n$5\r\nmylist\r\n:0\r\n:-1\r\n
4.4 集合操作示例
SADD 命令
*3\r\n$4\r\nSADD\r\n$6\r\nmyset\r\n$5\r\nvalue\r\n
SMEMBERS 命令
*2\r\n$8\r\nSMEMBERS\r\n$6\r\nmyset\r\n
4.5 有序集合操作示例
ZADD 命令
*4\r\n$4\r\nZADD\r\n$7\r\nmyscore\r\n:100\r\n$4\r\nuser\r\n
5. 实际操作示例
5.1 连接并测试
$ telnet 192.168.16.16 6379
Connected to 192.168.16.16
Escape character is '^]'.
PING
+PONG
SET testkey "Hello Redis"
+OK
GET testkey
$11
Hello Redis
5.2 批量操作示例
*3\r\n$3\r\nSET\r\n$5\r\nname1\r\n$4\r\nJohn\r\n
+OK
*2\r\n$4\r\nKEYS\r\n$1\r\n*\r\n
*1
$5
name1
6. 协议解析要点
6.1 换行符规则
- 所有 Redis 协议行以
\r\n(CRLF) 结尾 - 不要忘记添加换行符
6.2 长度计算
- 批量字符串和数组需要指定元素数量或长度
- 长度是指内容的字节数,不是字符数
6.3 特殊值处理
$-1\r\n表示空值 (null)*-1\r\n表示空数组
7. 常见问题与解决方案
7.1 连接问题
- 确认 Redis 服务器 IP 和端口正确
- 检查防火墙设置
- 确认 Redis 服务正在运行
7.2 协议格式错误
- 确保所有命令行以
\r\n结尾 - 检查长度计算是否正确
- 验证协议格式是否符合规范
7.3 权限问题
-
如有密码保护,需要先执行 AUTH 命令
AUTH yourpassword
8. 总结
- Redis 协议结构简单,基于文本格式
- 支持多种数据类型和丰富的命令集
- Telnet 方式适合调试和测试 Redis 服务
- 理解协议结构有助于更好地使用 Redis