我命由我,不由天!


  • 搜索
prometheus docker golang linux kubernetes

redis-RESP协议(十一)

发表于 2021-05-30 | 0 | 阅读次数 200

交头接耳

Redis的作者认为数据库的瓶颈不在于网络流量,在于数据库自身内部逻辑处理。所以Redis使用了浪费流量的文本协议。

RESP

RESP(Redis Serialization Protocol)是Redis序列化协议的简写。是一种直观的文本协议,优势在于实现过程简单,解析性极好

将传输的结构数据分为5种最小单元类型,单元结束统一加上回车换行符号\r\n

  1. 单行字符串以"+"符号开头
  2. 多行字符串以"$"符号开头,后跟字符串长度
  3. 整数值以":"符号开头,后跟整数的字符串形式
  4. 错误消息以"-"符号开头
  5. 数组以"*"号开头,后跟数组的长度
单行字符串 hello word
hello world\r\n
多行字符串 hello world
$ll\r\nhello world\r\n

多行字符串当然也可以表示单行字符串

整数1024
:1024\r\n
错误

参数类型错误

-WRONGTYPE Operation against a key holding the wrong kind of value\r\n
数组[1,2,3]
*3\r\n:1\r\n:2\r\n:3\r\n
NULL

NULL用多行字符串表示,不过长度协程-l

$-l\r\n
空串

空串用多行字符串表示,长度填0

$0\r\n\r\n

两个\r\n,隔的是空串

客户端——》服务端

客户端向服务器发送的指令只有一种格式,多行字符串数组。比如一个简单的set指令set author codehole会被序列化成下面的字符串

*3\r\n$3\r\nset\r\n&6\r\nauthor\r\n$8\r\ncodehole\r\n
  • 本文作者: Dante
  • 本文链接: https://gaodongfei.com/archives/redis-resp
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
redis-线程IO模型(十)
redis-持久化(十二)
  • 文章目录
  • 站点概览
Dante

Dante

119 日志
5 分类
5 标签
RSS
Creative Commons
0%
© 2023 Dante
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4
沪ICP备2020033702号