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
相关推荐
剩下了什么5 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥6 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉6 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变6 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
山岚的运维笔记8 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里9 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科9 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦9 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
indexsunny9 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
晚霞的不甘10 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d