当前位置: 首页 > news >正文

go手写Redis(1)之协议说明

手写Redis

参考大佬的go实现redis,自己实现一个简单版本的用于学习go以及网络编程相关

https://github.com/HDT3213/godis
https://coding.imooc.com/class/576.html #慕课网课程

源码地址:

https://gitee.com/haijun1998/go_redis

RESP协议

Redis Serialization Protocol redis序列化协议,包括五种消息类型

  • 正常回复
  • 错误回复
  • 整数
  • 多行字符串
  • 数组

正常回复

  • 以 " + " 开头,以 “\r\n” 结尾的字符串形式
+OK\r\n  #指令正常

错误回复

  • 以 " - " 开头,以 “\r\n” 结尾的字符串形式
-Error message \r\n  #指令执行错误

整数

客户端跟Redis进行通信的格式

  • 以 " : " 开头,以 “\r\n” 结尾的字符串形式
:123456\r\n

多行字符串

  • 以 " $ " 开头,后面跟实际发送字节数,以 “\r\n” 结尾的字符串形式
如果发送:hello world
$11\r\nhello world\r\n  #$开头实际的字节长度,后面以\r\n结尾
发送空字符串
$0\r\n\r\n    #\r\n发送空字节

数组

  • 以 " * " 开头,后面跟成员的个数
SET key value  3个字符串就是3个成员
转换后:
*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n

上面就是 RESP 协议的说明,下面说明一下源码的模块

模块说明

  • aof:redis aof实现
  • common:定义常量的模块
  • config:用于解析 redis.conf 的配置
  • database:数据库核心,包括数据库、命令的执行
  • datastruct:数据结构模块
  • interface:顶级接口定义的模块
  • lib:一些工具文件的定义
  • logs:自定义的日志打印
  • resp:连接器、处理器、响应体的定义和实现
  • tcp:tcp协议监听处理
http://www.lryc.cn/news/70183.html

相关文章:

  • Hadoop/HbBase/Hive/HDFS/MapReduce都是什么?
  • 羽毛球中级提高班课后总结
  • 多维时序预测 | Matlab基于最小二乘支持向量机LSSVM多维时间序列预测,LSSVM多变量时间序列预测
  • KDZK-F水轮发电机转子测试仪
  • I2C通信协议原理和MPU6050
  • 3.5 RDD持久化机制
  • Nginx(四)
  • 【fps系统重构】-观察cpu、memroy、io -iostat
  • iptables 添加,删除,查看,修改,及docker运行时修改端口
  • Liunx安装Android Studio
  • 8、Linux C/C++ 实现MySQL的图片插入以及图片的读取
  • 【搭建轻量级图床】本地搭建LightPicture开源图床管理系统 - 异地远程访问
  • 微信小程序全局路由拦截
  • 截图自动添加水印(macOS/windows)
  • 大学四年,我建议你这么学网络安全
  • Spring Boot整合Redis缓存并使用注解
  • 通知可以根据切入点表达式来进行增强,也可以根据自己的注解值来进行增强
  • <Python实际应用>做一个简单的签到投屏系统
  • 时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测
  • Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用(C++)
  • BERT输入以及权重矩阵形状解析
  • 3 个令人惊艳的 ChatGPT 项目,开源了!
  • 一、12.C++内存管理
  • ensp实践dhcp服务
  • 【王道·计算机网络】第六章 应用层
  • 【论文解读】(如何微调BERT?) How to Fine-Tune BERT for Text Classification?
  • 工程师是怎样对待开源
  • Spring Boot日志系统大揭秘:从零开始学习Spring Boot日志:常见问题解答和最佳实践
  • 【06】Nginx之反向代理
  • TCP是面向字节流的协议