- 博客(18)
- 收藏
- 关注
原创 【PHP7源码分析】PHP中$_POST揭秘
运营研发团队 季伟滨一、前言 前几天的工作中,需要通过curl做一次接口测试。让我意外的是,通过$_POST竟然无法获取到Content-Type是application/json的http请求的body参数。 查了下php官网(http://php.net/manual/zh/rese...)对$_POST的描述,的确是这样。后来通过file_get_contents("ph...
2018-11-03 21:31:28
2190
1
原创 【PHP7源码分析】如何理解PHP虚拟机(一)
顺风车运营研发团队 李乐1.从物理机说起虚拟机也是计算机,设计思想和物理机有很多相似之处;1.1冯诺依曼体系结构冯·诺依曼是当之无愧的数字计算机之父,当前计算机都采用的是冯诺依曼体系结构;设计思想主要包含以下几个方面:指令和数据不加区别混合存储在同一个存储器中,它们都是内存中的数据。现代CPU的保护模式,每个内存段都有段描述符,这个描述符记录着这个内存段的访问权限(可读,可写,...
2018-11-03 21:25:12
261
原创 【Nginx源码研究】初探nginx HTTP处理流程
运营研发团队 李乐1.初始化服务器server指令用于配置virtual server,我们通常会在一台机器配置多个virtual server,监听不同端口号,映射到不同文件目录;nginx解析用户配置,在所有端口创建socket并启动监听。nginx解析配置文件是由各个模块分担处理的,每个模块注册并处理自己关心的配置,通过模块结构体ngx_module_t的字段ngx_command_...
2018-10-23 23:11:58
226
原创 【Redis学习笔记】2018-07-11 Redis命令源码学习五
作者:顺风车运营研发团队 张仕华ZADDZADD key [NX|XX] [CH] [INCR]score member [score member ...]将元素及对应分值添加到一个有序集合中NX:不更新已经存在的key,只增加新元素XX:只更新已经存在的key,不增加新元素CH:abbr:changed.不指定时只返回新增的元素个数,指定时返回新增的和更新的元素个数之和...
2018-07-20 09:57:28
219
原创 【Redis学习笔记】2018-07-09 Redis命令源码学习四
作者:顺风车运营研发团队 熊浩含sdiffSDIFF key [key ...]返回一个集合的全部成员,该集合是所有给定集合之间的差集。准确来说,是返回第一个集合与其它集合并集的差集,即有SDIFF A B1 B2 B3...Bn,最终返回A-(B1∪B2∪...∪Bn)不存在的 key 被视为空集。原理M(A 集合元素个数)N(其余集合元素总数)n(集合总数)算...
2018-07-20 09:56:00
185
原创 【Redis学习笔记】2018-07-10 Redis命令源码学习三
作者:顺风车运营研发团队 闫昌一. smove使用方式: smove source destination member使用描述: 将member元素从source集合移动到destination集合smove是原子性操作如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被...
2018-07-20 09:51:57
144
原创 【Redis学习笔记】2018-07-06 Redis命令源码学习二
作者:顺风车运营研发团队 谭淼一、brpoplpushbrpoplpush是rpoplpush的阻塞版本,当给定列表 source 不为空时, brpoplpush的表现和rpoplpush一样。当列表 source 为空时,brpoplpush命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行lpush或rpush命令为止。brpoplpush的源码如下:vo...
2018-07-20 09:49:58
182
原创 【Redis学习笔记】2018-06-28 redis命令源码学习一
作者:顺风车运营研发团队 谭淼1、dumpdump命令可以序列化给定 key ,并返回被序列化的值,使用 RESTORE命令可以将这个值反序列化为 Redis 键。/* DUMP keyname * DUMP is actually not used by Redis Cluster but it is the obvious * complement of RESTORE and c...
2018-07-20 09:46:45
205
原创 【Redis学习笔记】2018-06-06 rdb相关信息
作者:顺风车运营研发团队 肖涛概要:1、 阅读rdbSave源码2、 数据结构 rdbSaveInfo3、 rdb和aof的区别4、 redis的RIO和BIO5、 redis的opcode6、数据结构redisobj7、redis的lzf压缩,压缩函数rdbSaveLzfBlob详情:1、rdbSave函数。redis提供了rdb持久化的功能,通过rdb持...
2018-07-19 15:26:35
175
原创 【Redis学习笔记】2018-06-21 redis命令执行过程 SET
作者:顺风车运营研发团队 李乐1.命令执行过程1.1命令请求格式当用户在客户端键入一条命令请求时,客户端会将其按照特定协议转换为字符串,发送给服务器;服务器解析字符串,获取命令请求;例如,当用户执行 set key value 时,转换后的字符串为 *3rn3rnset3rnkey$5rnvaluern其中,*3表示当前命令请求参数数目(set命令也是一个参数);rn用于分隔每个参...
2018-07-19 15:24:21
312
原创 【Redis学习笔记】2018-05-29 redis源码学习之跳跃表
作者:顺风车运营研发团队 谭淼跳跃表(skiplist)是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到指向其他节点的目的。在Redis中,有序集合是通过跳跃表和hash实现的。一、跳跃表为了更好的阅读下面的文章,建议先对跳跃表的基本概念进行学习,链接如下:https://www.cnblogs.com/a8457...二、数据结构先看一下与跳跃表有关的数...
2018-07-19 15:22:08
186
原创 【Redis学习笔记】Redis跳表简析(插入过程)
作者: 顺风车运营研发团队 闫昌node和list的定义如下:typedef struct zskiplistNode { sds ele; double score; struct zskiplistNode *backward; struct zskiplistLevel { struct zskiplistNode *forward;...
2018-07-19 15:15:56
1455
原创 【PHP7源码分析】PHP7语言的执行原理
作者:顺风车运营研发团队 李志 发表在程序人生 公众号我们常用的高级语言有很多种,比较出名的有CC++、Python、 PHP、Go、Pascal等。而这些语言根据运行的方式不同,大体分为两种:编译型语言和解释型语言。其中,编译型语言包括CC++、Pascal、Go等。这里说的编译是指在应用源程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编译成目标文件。一般我们称完...
2018-07-19 15:12:33
1043
原创 【Redis学习笔记】bitcount分析
作者:顺风车运营研发团队 熊浩含一、命令简介BITCOUNT key [start] [end]redis计算给定字符串中,被设置为 1 的比特位的数量。redis> BITCOUNT bits(integer) 0redis> SETBIT bits 0 1 # 0001(integer) 0redis> BITCOUNT bits(in...
2018-07-19 14:54:28
776
原创 【PHP问题定位】线上机器打日志混乱问题定位分析
作者:顺风车运营研发团队 黄桃现象在线上脚本机器写入单条日志过长时会出现交叉打印的现象:被交叉的日志很有规律,都是单条日志过长被截断的,建议优化下 /*/ruleanalysis.php:68 此处写入日志的字符串长度为: int(25909)原因分析脚本服务写入日志代码如下:if ($this->isCli == true) { return file_...
2018-07-19 14:50:02
418
原创 【PHP问题定位】修改数据库字段导致的fpm的coredump问题定位
作者:顺风车运营研发团队 黄桃背景线上零星会出现fpm进程coredump 及 fpm进程占用内存超过限制等报警告,并且两者报警的时间上往往都比较接近,如下:原因分析时间上接近,那么出现两者报警的原因有可能是相同的,登录机器gdb调试coredump生成core文件:cd /***/coresave/gdb /***/php7/sbin/php-fpm -c cor...
2018-07-19 14:48:23
880
原创 【PHP7源码分析】PHP内存管理
作者: 顺风车运营研发团队 李乐第一章 从操作系统内存管理说起程序是代码和数据的集合,进程是运行着的程序;操作系统需要为进程分配内存;进程运行完毕需要释放内存;内存管理就是内存的分配和释放;1. 分段管理分段最早出现在8086系统中,当时只有16位地址总线,其能访问的最大地址是64k;当时的内存大小为1M;如何利用16位地址访问1M的内存空间呢?于是提出了分段式内存管理;将内...
2018-07-19 14:45:35
1570
原创 【PHP源码分析】FastCGI协议浅析
作者:顺风车运营研发团队 陈雷FastCGI 是一种协议,它是建立在CGI/1.1基础之上的,把CGI/1.1里面的要传递的数据通过FastCGI协议定义的顺序和格式进行传递。为了更好理解PHP-FPM的工作,下面具体阐述一下FastCGI协议的内容。1. 消息类型FastCGI协议分为了10种类型,具体定义如下:typedef enum _fcgi_request_type {...
2018-07-19 14:43:15
590
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人