0

0

Redis命令执行全过程

php中文网

php中文网

发布时间:2016-06-07 15:21:25

|

1234人浏览过

|

来源于php中文网

原创

这个问题说简单也很简单,无非就是客户端发送命令请求,服务器读取命令请求,然后是命令执行器查找命令实现,执行预备操作,调用

这个问题说简单也很简单,无非就是客户端发送命令请求,服务器读取命令请求,然后是命令执行器查找命令实现,执行预备操作,调用命令实现函数,执行后续工作。

但是我们想要了解的不能简简单单的就是这些。下面我们详细的来分析一下Redis命令执行的全过程。

发送命令请求

但用户通过客户端输入一个命令请求的时候,客户端首先会对用户输入的命令请求进行一个格式转换,转换成协议格式,然后通过连接到服务器的套接字把这个已经格式化的命令发送给服务器(服务器是通过套节字和客户端或者是其他服务器连接通信的)

读取命令请求

但客户端与服务器端的套接字因为客户端的写入而变的可读时(这点需要查阅Redis文件事件的内容,这里不再赘述),

服务器会首先读取套接字中的协议格式的命令请求,并将它保存到客户端状态的输入缓冲区中(这里输入缓冲区的大小可以根据输入内容动态的缩小或者扩大,但是最大不能超过1GB否则服务器将关闭这个客户端)

然后服务器对输入缓冲区中的命令请求进行分析,提取命令请求中包含的命令参数,以及参数的个数,然后分别将参数和参数个数保存到客户端状态的argv属性和argc属性中(argv属性是一个数组,数组中的每个项都是一个字符串对象,其中argv[0]是要执行的命令,之后的其他项是传给的命令参数,argc属性负责记录argv数组的长度)

最后是调用命令执行器,执行客户端指定的命令。

命令执行

当服务器分析得到argv和argc属性的值之后,服务器会根据arg[0]的值在命令表中查找所对应的命令实现函数,Redis命令表示一个字典(字典的又一个应用)key是命令的名字,value对应一个redisCommand结构,保存了命令的实现函数、命令的标志、命令应该指定的参数个数、命令总执行次数、总消耗时间等统计信息。

找到实现函数之后并不是真正的执行命令,还需要进行一些检查操作,

检查用户输入的命令名字是否能找到相应的命令实现,

然后检查用户输入的参数个数是否符合要求(redisCommand结构中有个arity属性,如果是 -3 表示输入的参数个数必须大于等于3)

然后还要检查客户端是否通过了身份验证,如果通过了身份验证客户端状态里的authenticated属性的值是1,否则是0(Auth命令)

MvMmall 网店系统
MvMmall 网店系统

免费的开源程序长期以来,为中国的网上交易提供免费开源的网上商店系统一直是我们的初衷和努力奋斗的目标,希望大家一起把MvMmall网上商店系统的免费开源进行到底。2高效的执行效率由资深的开发团队设计,从系统架构,数据库优化,配以通过W3C验证的面页模板,全面提升页面显示速度和提高程序负载能力。3灵活的模板系统MvMmall网店系统程序代码与网页界面分离,灵活的模板方案,完全自定义模板,官方提供免费模

下载

还有就是内存占用情况、上次执行bgsave出错的话是否打开了stop-writes-on-bgsave-error等等检查。

检查全部通过之后就是调用命令的实现函数,也就是真正的执行命令了,执行完之后会将执行的结果保存客户端状态的输出缓冲区中,输出缓冲区有两个,一个是固定大小16Kb,用来保存长度较小的回复,还有就是可变大小的输出缓冲区,用来保存长度较大的回复【注意:服务器通过两种模式限制客户端输出缓冲区的大小,一种是硬性限制,一种是软性限制,如果超出的硬性限制的大小,服务器立即关闭客户端,如果超出的软性限制,,但是没有超硬性限制,那么记录超出的时间,如果一直超出,持续时间超过了设置的时间,那么关闭客户端,相反不会关闭】

最后执行后续的工作,包括更新慢查询日志记录,更新redisCommand结构中的一些统计信息,还有一些持久化操作,复制操作等。

最后的最后就是将结果发送给客户端,仍旧是套接字。

Ubuntu 14.04下Redis安装及简单测试

Redis集群明细文档

Ubuntu 12.10下安装Redis(图文详解)+ Jedis连接Redis

Redis系列-安装部署维护篇

CentOS 6.3安装Redis

Redis安装部署学习笔记

Redis配置文件redis.conf 详解

Redis 的详细介绍:请点这里
Redis 的下载地址:请点这里

本文永久更新链接地址

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

PHP入门到实战消息队列RabbitMQ
PHP入门到实战消息队列RabbitMQ

共22课时 | 1.3万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号