300分钟吃透分布式缓存-21讲:Redis读取请求数据后,如何进行协议解析和处理?

news/2024/4/28 12:23:17

Redis 协议解析及处理

协议解析
上一课时讲到,请求命令进入,触发 IO 读事件后。client 会从连接文件描述符读取请求,并存入 client 的 query buffer 中。client 的读缓冲默认是 16KB,读取命令时,如果发现请求超过 1GB,则直接报异常,关闭连接。
在这里插入图片描述
client 读取完请求命令后,则根据 query buff 进行协议解析。协议解析时,首先查看协议的首字符。如果是 *,则解析为字符块数组类型,即 MULTIBULK。否则请求解析为 INLINE 类型。

INLINE 类型是以 CRLF 结尾的单行字符串,协议命令及参数以空格分隔。解析过程参考之前课程里分析的对应协议格式。协议解析完毕后,将请求参数个数存入 client 的 argc 中,将请求的具体参数存入 client 的 argv 中。

协议执行
请求命令解析完毕,则进入到协议执行部分。协议执行中,对于 quit 指令,直接返回 OK,设置 flag 为回复后关闭连接。
在这里插入图片描述
对于非 quit 指令,以 client 中 argv[0] 作为命令,从 server 中的命令表中找到对应的 redisCommand。如果没有找到 redisCommand,则返回未知 cmd 异常。如果找到 cmd,则开始执行 redisCommand 中的 proc 函数,进行具体命令的执行。在命令执行完毕后,将响应写入 client 的写缓冲。并按配置和部署,将写指令分发给 aof 和 slaves。同时更新相关的统计数值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10476.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

力扣 617-合并二叉树

二叉树使用递归,就要想使用前中后哪种遍历方式? 本题使用哪种遍历都是可以的! 我们下面以前序遍历为例。 那么我们来按照递归三部曲来解决: 确定递归函数的参数和返回值: 首先要合入两个二叉树,那么参…

XSS-Labs靶场1---11关

一、XSS环境搭建: [ 靶场环境篇 ] XSS-labs 靶场环境搭建(特别详细)_xss靶场搭建-CSDN博客 (该博主总结的较为详细,若侵权必删) 常用的xss攻击语句: 输入检测确定标签没有过滤后,为了显示存在漏洞&#…

PyTorch之完整的神经网络模型训练

简单的示例: 在PyTorch中,可以使用nn.Module类来定义神经网络模型。以下是一个示例的神经网络模型定义的代码: import torch import torch.nn as nnclass MyModel(nn.Module):def __init__(self):super(MyModel, self).__init__()# 定义神经…

Win10桌面便签小工具怎么添加?一招轻松搞定!

在这个信息爆炸的时代,如何高效地管理自己的时间和任务成为了许多人关注的焦点。而Win10桌面便签小工具作为一款简单实用的工具,正逐渐受到更多人的关注和喜爱。作为Win10系统中常用的便捷工具之一,桌面便签小工具的添加操作简单又实用。那么…

阳光音乐厅订票系统技术解析 Java+SpringBoot+Vue+MySQL

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

多模态响应与功能集成!华中科技大学微型磁控胶囊机器人登上《Nature Communications》!

胶囊机器人可以通过口服方式抵达胃肠道病灶区域实施医疗功能,为实现胃肠道疾病无痛无创诊疗和提高患者依从性提供了重要途径。其中,磁控胶囊机器人技术因其驱动方式具有非接触、穿透性能好和控制模式丰富等优势而被认为是最理想的胃肠道疾病诊疗手段之一…