Redis 协议详解与 Telnet 直接连redis

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
相关推荐
2301_7938046933 分钟前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
vpk11239 分钟前
Docker Compose 安装 Redis
redis·docker·容器
不想看见4042 小时前
Qt 项目中实现良好封装(模块化设计)的详细流程指南
数据库·系统架构
mygljx2 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
Jeremy爱编码2 小时前
软考数据库
数据库
Bdygsl3 小时前
MySQL(1)—— 基本概念和操作
数据库·mysql
zongzizz3 小时前
Oracle 11g 两节点rac在机房断电重启后PL/SQL和客户端连接数据库报错ORA-12541
数据库·oracle
qq_417695053 小时前
实战:用OpenCV和Python进行人脸识别
jvm·数据库·python
身如柳絮随风扬3 小时前
什么是左匹配规则?
数据库·sql·mysql
xinhuanjieyi3 小时前
ruoyimate导入sql\antflow\bpm_init_db.sql报错
android·数据库·sql