网站首页 > 开源技术 正文
Redis命令相关的数据结构主要有两个:redisCommandTable是一个命令列表,该列表注册了所有的redis支持的命令。另外一个是redisCommand,这就是真正的命令实现了,该结构的proc属性是一个函数指针,指向的命令具体实现函数。
Redis命令结构
- redisCommandTable:命令表,定义了命令操作符、参数个数及对应实现等信息
- redisCommand:命令结构,内部描述了命令的属性,其中proc是一个函数指针,指向命令的实现函数
Redis命令执行器
一个命令的请求从发送获取回复的过程中,客户端和服务器需要完成一系列的操作,如下图所示是一个set命令的执行过程:
- 当服务端收到客户端请求后会通过请求处理器创建一个redisClient并追加到服务器redisServer的clients链表中
- 建立连接后通过socket接收到后续客户端发送的命令,Redis通过对应命令执行器执行完成后返回给客户端结果
详细执行过程如下:
- aeMain主线程轮询到事件队列的读就绪事件,并调用事件对应的事件处理器-命令请求处理器
- 命令请求处理器开始读取socket中客户端发送来的数据至redisClient命令接收缓冲区
- 主线程通过redisClient命令请求缓冲区中的命令信息开始执行业务
- 首先通过读取到的命令信息,在命令注册表中找到命令的实现函数
- 开始命令执行前的预校验工作,比如访问权限、参数个数等校验
- 执行命令实现函数,获取执行结果后,调用addApply函数将命令执行结果写入到redisClient的命令回复缓冲区,派发可写事件至事件队列
- 命令回复处理器接收到事件开始从命令回复缓冲区读取回复内容,并通过socket发送给客户端
以上就是Redis命令系统设计的介绍,如果各位还想了解更多,欢迎转发+评论+关注,Redis图解系列专栏持续更新中。
猜你喜欢
- 2024-10-27 Golang 入门系列(七)整合Redis详解,实战
- 2024-10-27 几个小技巧,让你的Redis程序快如闪电
- 2024-10-27 掌握这些 Redis 技巧,百亿数据量不在话下
- 2024-10-27 「高频 Redis 面试题」Redis 事务是否具备原子性?
- 2024-10-27 Spring系列之Redis的两种集成方式
- 2024-10-27 架构篇-一分钟掌握可扩展架构(可扩展是什么意思)
- 2024-10-27 Redis 数据持久化与发布订阅(redis持久化aof)
- 2024-10-27 依赖倒置原则详解(对依赖倒置的表述错误的是)
- 2024-10-27 五种分布式锁(分布式锁最佳实践)
- 2024-10-27 Alibaba/IOC-golang 正式开源——打造服务于go开发者的IOC框架
你 发表评论:
欢迎- 03-19基于layui+springcloud的企业级微服务框架
- 03-19开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- 03-19SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- 03-19SpringBoot+LayUI后台管理系统开发脚手架
- 03-19layui下拉菜单form.render局部刷新方法亲测有效
- 03-19Layui 遇到的坑(记录贴)(layui chm)
- 03-19基于ASP.NET MVC + Layui的通用后台开发框架
- 03-19LayUi自定义模块的定义与使用(layui自定义表格)
- 最近发表
-
- 基于layui+springcloud的企业级微服务框架
- 开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- SpringBoot+LayUI后台管理系统开发脚手架
- layui下拉菜单form.render局部刷新方法亲测有效
- Layui 遇到的坑(记录贴)(layui chm)
- 基于ASP.NET MVC + Layui的通用后台开发框架
- LayUi自定义模块的定义与使用(layui自定义表格)
- Layui 2.9.11正式发布(layui2.6)
- Layui 2.9.13正式发布(layui2.6)
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)