news 2026/4/18 0:28:48

kvstore (二)协议层设计 + 引擎层初识(array数组)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
kvstore (二)协议层设计 + 引擎层初识(array数组)

前言

介绍

所谓kvstore就是类似于redis服务器的一种思想,通过自定义的一些协议,能够根据网络层recv到的数据进行解析,然后去到kvstore中的引擎层拿到想要的数据,最后封装组织回发。
自定义协议可以如下–CRUD:

  1. SET:set key value
  2. GET:get key
  3. DEL:del key
  4. MOD:mod key value
  5. EXIST:exist key

基于上一章节kvstore (一) 网络层设计,我们已经实现了将接收完数据后获取接收数据,并进行处理(上节只是做了简单打印)的函数kvs_protocol(char* msg , int length , char * response)通过函数指针的方式可以传递到各个网络框架的recvsend层面,本节就要对该业务方法进行实现。具体思路如下:

  1. 分割解析字符串 --msg:将字符串按照协议格式进行分割,并将指针存储到数组中。kvs_filter_token(char*msg , char *token[])
  2. 解析字符串(过滤器/分析器):对分割后的字符串进行识别,并在其内部调用引擎层的方法,比如:kvs_array_set()等方法

协议层设计

intkvs_protocol(char*msg,intlength,char*response){//其实此处按照协议格式只需要为3,但是为了防止set key value1 value2 ....这种,可以设定大一些char*tokens[kvs_max_tokens]={0};//分割字符串(为解析协议做准备)intcount=kvs_split_token(msg,tokens);//识别分割的字符串,并分别调用对应的业务逻辑set、get....returnkvs_filter_protocol(tokens,count,response);}

1. 分割解析字符串

核心思想:

  1. 利用strtok()方法,将msg进行“ ”分割,并且按照索引存到tokens数组中
  2. 分解后的tokens[0]:set/get/mod/del,tokens[1]:key,tokens[2]:key
kvs_split_token(char*msg,char*tokens[]){......}

2. 解析字符串tokens[0],tokens[1],tokens[2]

2.1 定义一个枚举和指针数组

此处为了方便循环遍历,我么可以定义一个枚举,里面对应着指针数组char *command[]中的具体执行参数。

....
.....

2.2 根据解析到的cmd,分别调用不同的方法

利用2.1中定义的方便遍历的enum,可以通过switch - case进行处理:

  1. KVS_CMD_SET:----kvs_array_set
  2. KVS_CMD_GET:----kvs_array_get
  3. KVS_CMD_MOD:----kvs_array_MOD
  4. KVS_CMD_EXIST:----kvs_array_EXIST
......

引擎array初步实现

根据上述所讲,已经可以实现接收到的数据包的解析,因此我们需要一个数据结构作为引擎对数据进行存储、修改、删除等
这里先使用简单的array数组捋清楚引擎层的思路,后续引入更为高效的数据结构。


数组数据结构图片 –


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:36:13

Elasticsearch更新与删除文档的过程全揭秘

文章目录 详细描述一下 Elasticsearch 更新和删除文档的过程?前言一、更新文档的过程1. 更新文档的基本概念为什么需要更新文档?更新文档的实现方式 2. 更新文档的底层机制第一步:定位目标文档第二步:获取旧版本的文档第三步&…

作者头像 李华
网站建设 2026/4/18 1:26:05

医学影像分析:在TensorFlow镜像中训练3D U-Net

医学影像分析:在TensorFlow镜像中训练3D U-Net 当放射科医生面对一例复杂的脑肿瘤MRI扫描时,他们需要从数百张连续切片中识别病灶的边界、评估其侵袭范围,并判断是否涉及关键功能区。这项任务不仅耗时,还高度依赖经验。如果能有一…

作者头像 李华
网站建设 2026/4/18 3:36:57

2025年Agent智能体开发指南:深入解析7大主流应用场景!

在AI技术全面渗透的今天,Agent(智能体)早已不是实验室里的抽象概念,而是走进企业工位、家庭场景的实用工具。这种具备目标驱动、自主规划、工具协同能力的数字实体,正在彻底改变我们的工作模式与生活节奏。index.dev 2…

作者头像 李华
网站建设 2026/4/18 3:38:01

基于TensorFlow的GPU算力优化:开源模型训练新范式

基于TensorFlow的GPU算力优化:开源模型训练新范式 在当今AI驱动的工业浪潮中,一个现实问题正困扰着无数工程师:明明配备了高端GPU集群,训练任务却常常卡在“50%利用率”的瓶颈上。GPU风扇呼啸运转,显存使用曲线却像心电…

作者头像 李华
网站建设 2026/4/18 3:31:10

Loop flush pipeline flush

一、flush重要性 1.当在pipeline设计中,如果没有有效数据,pipeline will stall挂起 2.使用pipeline指令,pipeline将会flush清空二、flush类型1.stall pipeline当没有有效数据的时候,pipeline就stall挂起2.3.

作者头像 李华