zoukankan      html  css  js  c++  java
  • Redis【一】 RESP协议

    https://redis.io/topics/protocol

    RESP:redis序列化协议

    client-server交流

    二进制安全的

    网络层

    client端建立tcp连接到Server port 6379,使用TCP连接

    除了

    • 管道通信,一次可发送多条命令,然后等待回复
    • pub/sub

    以外,是简单的request-response模型

    RESP怎么使用的

    client发送命令到redis server,使用字符串块的数组
    server应答,根据命令的实现,返回相应的resp响应类型

    在resp中,一些数据的类型是依赖数据的第一个byte:
    简单字符串,reply的第一个byte是+
    Errors第一个byte是-
    Integers第一个byte是:
    Bulk Strings 第一个byte是$
    Arrys第一个byte是*

    一个请求的协议中,不同的部分,使用 分隔

    举个Intergers的例子

    reply:":1000 "
    数字的范围是有符号64位数字,和有符号long一样,
    exists返回数字1表示存在,0不存在,incr返回incr后的数字,llen返回长度,sismember返回1表示true,0表示false

    Bulk Strings

    目的是表示二进制安全的String,可长达512MB
    "$6 foobar " foobar
    "$0 " 空串
    "$-1 " 表示Null

    RESP Arrays
    client向server发送的是Arrays,*后面会跟一个数字,表示数组长度

    "0 " empty array
    "
    2 $3 foo $3 bar " "foo" 和 "bar"
    "*3 :1 :2 :3 " 1 和 2 和 3

    *3
    $3
    foo
    $-1 空的元素
    $3
    bar -> ["foo",nil,"bar"]

    Arrays可以糅合多种类型

    高性能解析器for Redis协议

    • 使用前置长度来转换bulk data,因此不用扫描payload(有效载荷)
    • 块数据和多块数据长度可以和查找CR( )时一起获取
  • 相关阅读:
    day44
    day38
    day37
    day36
    作业35
    day35
    作业34
    day34
    day33
    Windows API 第三篇
  • 原文地址:https://www.cnblogs.com/windliu/p/9125379.html
Copyright © 2011-2022 走看看