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
相关推荐
言之。1 天前
DDIA第四章 数据库存储引擎面试问题集
数据库·面试·职场和发展·ddia
wangbing11251 天前
redis的存储问题
数据库·redis·缓存
剑来.1 天前
一次完整的 MySQL 性能问题排查思路(线上实战总结)
数据库·mysql·oracle
2301_800256111 天前
【数据库】查找距离最近的电影院 pgSQL 存储过程片段
大数据·数据库·excel
2501_941807261 天前
在迪拜智能机场场景中构建行李实时调度与高并发航班数据分析平台的工程设计实践经验分享
java·前端·数据库
week_泽1 天前
小程序云数据库查询操作_2
数据库·小程序
一 乐1 天前
餐厅点餐|基于springboot + vue餐厅点餐系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
zs宝来了1 天前
大厂面试实录:Spring Boot源码深度解析+Redis缓存架构+RAG智能检索,谢飞机的AI电商面试之旅
spring boot·redis·微服务·大厂面试·java面试·rag·spring ai
小王和八蛋1 天前
TDDL、Amoeba、Cobar、MyCAT 架构比较
数据库