• 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( )时一起获取
  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/windliu/p/9125379.html
Copyright © 2020-2023  润新知