这篇文章主要介绍Redis 协议的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Redis实例运行于单独的进程,应用系统和Redis通过Redis协议进行交互。在Redis协议之上,客户端和服务器可以实现多种典型的交互模式:串行的请求/响应模式、双工的请求/响应模式(pipeline)、原子化的批量请求/响应模式(事务)、发布/订阅模式、脚本化的批量执行(脚本模式)。Redis的交互协议分为两部分:网络协议和序列化协议。Redis协议位于TCP连接之上,即客户端和Redis实例保持双工的连接。客户端和服务器交互的内容是序列化后的相应类型的协议数据,服务器为每个客户端建立对应的连接,在应用层维护一系列状态保存在上图的connection中,connection间相互无关联。在Redis中,connection通过redisClient结构体实现。在Redis中,协议数据分为不同的类型,每种类型的数据均以CRLF(rn)结束,通过数据的首字符区分类型。这类数据表示Redis命令,首字符为Redis命令名的字符。首字符为’+’,后续字符为strig的内容,且该string不能包含’r’或’n’两个字符,最后以’rn’结束。simple string本身不含转义,所以客户端的反序列化效率很高,直接将’+’和最后两个字节’rn’之间的内容拷贝即可。对于string本身含有’r’或’n’的情况,解法有两种:转义和长度自描述。转义反序列化效率低下,Redis采用的是长度自描述,称为bulk string。bulk string的首字符为’$’,紧随其后的是str 香港云主机ing数据的长度,‘rn’之后紧跟着string的内容本身(可以包含包括’r’和’n’在内的特殊字符),最后以’rn’结束。“$12rnhellornworldrn” 这19个字节描述了hellornworld这个两行的string。对于””空字符串和null,通过’$’之后的数字进行区分:”$0rnrn” 这6个字节表示空字符串”$-1rn” 这5个字节表示nullRedis中error类型的数据的内容就是一个普通的string,但是和普通的string的区别是error的首字符是’-‘。客户端直接通过首字符即可判断本次交互是否出错。以’:’开头,紧跟着整形数字本身,最后以’rn’结尾。”:13rn”表示整数13。以’*’开头,紧跟着数组的长度,’rn’之后就是数组中每个元素序列化的数据。”*2rn+abcrn:9rn”表示[“abc”, 9]。数组长度为0或者-1分别表示空数组或null。数组元素本身也可以是数组,多级数组是树状结构,采用类似先序遍历的方式序列化。 “*2rn*2rn:1rn:2rn*1rn+abcrn”表示[[1, 2],[“abc”]]。客户端发送给服务的类型:inline command、由bulk string组成的array。服务端发送给客户端的类型为除了inline command之外的所有类型,并根据客户端命令或者交互模式的不同进行确定。以上是“Redis 协议的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注开发云行业资讯频道!
本篇内容主要讲解“C++核心准则怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++核心准则怎么理解”吧!花点时间理解准则可能为你程序带来的的影响。这些准则按照“超集的子集”原则设计。它们不是简单地定义一个…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。