Redis客户端-RESP的简简单单介绍

介绍RESP协议

  • 之前学习的主要是各种redis的基本操作/命令,都是在redis命令行客户端,手动执行的,更多的时候,是使用redis的api,来实现定制化的redis客户端程序,进一步操作redis服务器
  • 联想到之前学习过的JDBC/MyBatis可以实现,redis提供的命令行客户端/第三方的图形化客户端,它们本质上都属于是”通用的客户端程序“,相比之下,我们更希望用到”专用的“,”定制化“的客户端程序,redis命令相当于使用代码来执行
  • 为什么我们能编写出一个自定义的redis客户端,那咱们能不能编写出一个qq的自定义客户端/王者农药的自定义客户端/xxxx自定义客户端

网络协议:

应用层:虽然业界有很多成熟的应用层协议:HTTP协议等,但是此处更多的时候,都会”自定义“应用层协议,Redis此处应用层协议,就是自定义的协议,传输层还是基于TCP(客户端按照这里的应用层协议发送请求,服务器按照这个协议进行解析,再按照这个协议构造响应,客户端再介意这个响应)咱们作为第三方,要想开发一个redis客户端也就需要知道redis的应用层协议

  • 之所以上述通信能够完成,是因为开发客户端的人和开发服务器的人都清楚的知道协议的细节
  • 以下协议是固定好的,是在系统内核或者驱动程序中实现的,只能选择,不能修改

传输层:TCP/UDp协议 | 网络层:IP协议 | 数据链路层:以太网 | 物理层

Redis自定义的应用层协议的名字-RESP

不能编写自定义的qq/王者农药客户端,因为他们并没有公开协议的,但是网上还是有一些自定义的qq自定义的客户端啊?这是因为通过一些抓包/逆向手段,猜测qq的应用层协议是啥样的,猜多猜少靠水平+运气了

RESP优点:

  • 简单好实现
  • 快速进行协议
  • 肉眼可读

传输层基于TCP,但是和TCP又没有强耦合,请求和响应之间的通信模型是一问一答的形式,客户端给服务器发一个请求,服务器给客户端返回一个响应

RESP协议的描述:

客户端给服务器发送的是redis命令(bulk string),不同的命令返回结果不一样,有的命令返回OK,有的命令返回整数,有的返回个数组,交代了请求和响应的格式

RESP协议的具体数据格式符号

如果是+,则是简单字符串

服务器就把这个字符串,写入到tcp socket中即可,simple string只能当作简单文本

服务器也把这个字符串也写到tcp socket中

服务器把整数写到tcp socket中

服务器把bulk string写到tcp socket中,可以传输二进制数据

因此,redis客户端服务器要做的工作

  • 按照上述格式,构造出字符串,往socket中写入
  • 从socket中读取字符串,按照上述格式解析

Question:那么写代码要按照上述的协议,解析/构造字符串嘛?


Answer:不用,因为这套协议,公开已久,已经有很多大佬实现了这套协议的解析构造,这些大佬提供的库,就可以比较简单方便的来完成和redis服务器通信的操作了

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值