我们为什么需要了解RESP协议?

RESP
RedisRESP

TCP8888redis-cli -p 8888
redis-cli -p 8888

redis

*1
$7
COMMAND

RESPRedisRESP

什么是RESP协议

RESPRedisRedis 1.2Redis 2.0Redis
  • 实现简单
  • 快速解析
  • 直接可阅读
RESPRESP

RESP协议规范

RESP\r\n
类型前缀备注
简单字符串+简单字符串以+开头
错误数据-错误数据以-开头
整数:整数以:开头
复杂字符串$复杂字符串以$开头
数组*数组以*开头

我当初看到这个的时候,也是迷迷糊糊的,到底什么意思呢? 哎,我们举个例子你就明白了。

若我们想执行

RESP
*3$3set$10juejinName$5pdudo

我们结合上述信息,可以画一张图。

这就是协议的内容了。

+-:

例如:

+
-
:
Redis
RESPtelnet
RESPredis

命令

RESP
telnet

现在回头看看官网文档所提及的,该协议实现简单,直接可阅读,是不是理解的更加深刻了呢?

使用go编写Redis中间件实现读写分离

本篇暂不解释代码,而后单独开一篇谈论中间件代码。

实现该功能,其实本质上是区分命令是查询还是写入,若是查询,则直接转发到从库,而写入,则转发到主库即可,其架构图可以理解为如下:

我们已经有了目前的架构。

主机端口密码角色
127.0.0.16379主库
127.0.0.17380从库

相关代码已经放到了 gitee.com/pdudo/golea…

我们来看看实际效果呢:

总结

RESPgoRESPRESP

怎么样,好玩吧,动动你的小手指,快来试试吧。