文档章节

phpredis connect && pconnect分析

落叶纷飞v
 落叶纷飞v
发布于 2017/04/06 10:23
字数 632
阅读 66
收藏 1
点赞 0
评论 0

phpredis拓展提供了两种连接redis的方式:connect和pconnect

现在利用strace工具来观察两者的区别:

1.connect

代码如下:

<?php

//echo "hello world, php";
// test redis connect

$redis = new Redis();
$redis->connect("127.0.0.1", 2180);

$retval = $redis->set("zhang", '123');

var_dump($retval);

假设php-fpm子进程的pid = 3000,通过strace工具跟踪进程的运行情况:

// 重定向到/tmp/testStrace.log中
ubuntu-root# strace -p 3000 -s 1024 -0 /tmp/testStrace.log

通过浏览器访问test.php文件,然后查看strace捕获到的信息如下:

accept(0, {sa_family=AF_INET, sin_port=htons(45960), sin_addr=inet_addr("127.0.0.1")}, [16]) = 4
// 参数返回进程的各种事件,函数返回值就是返回实际运行的时间
times({tms_utime=0, tms_stime=2, tms_cutime=0, tms_cstime=0}) = 1718119770
// 文件描述符4
poll([{fd=4, events=POLLIN}], 1, 5000)  = 1 ([{fd=4, revents=POLLIN}])
...
// 读取http请求的信息
read(4, "\f\0QUERY_STRING\16\3REQUEST_METHODGET\f\0CONTENT_TYPE\16\0CONTENT_LENGTH\v\tSCRIPT_NAME/test.php\v\tREQUEST_URI/test.php\f\tDOCUMENT_URI/test.php\r\20DOCUMENT_ROOT/opt/htdocs2/php\17\10SERVER_PROTOCOLHTTP/1.1\21\7GATEWAY_INTERFACECGI/1.1\17\vSERVER_SOFTWAREnginx/1.8.0\v\rREMOTE_ADDR192.168.40.19\v\4REMOTE_PORT8221\v\rSERVER_ADDR192.168.40.33\v\2SERVER_PORT80\v\fSERVER_NAMEwww.test.com\17\3REDIRECT_STATUS200\17\31SCRIPT_FILENAME/www/htdocs2/php/test.php\v\tSCRIPT_NAME/test.php\t\fHTTP_HOSTwww.test.com\17\nHTTP_CONNECTIONkeep-alive\22\tHTTP_CACHE_CONTROLmax-age=0\36\1HTTP_UPGRADE_INSECURE_REQUESTS1\17lHTTP_USER_AGENTMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\vJHTTP_ACCEPTtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\24\23HTTP_ACCEPT_ENCODINGgzip, deflate, sdch\24\16HTTP_ACCEPT_LANGUAGEzh-CN,zh;q=0.8\0\0\0\0\0\0", 840) = 840
...
...
...
// 打开需要执行的php文件
open("/mnt/hgfs/htdocs2/php/test.php", O_RDONLY) = 9
...
mmap(NULL, 177, PROT_READ, MAP_SHARED, 9, 0) = 0x7f6a0d7ee000
...
munmap(0x7f6a0d7ee000, 177)             = 0
// 关闭打开的文件
close(9)                                = 0

// 创建socket链接 socket id = 9
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 9
...
connect(9, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("192.168.40.19")}, 16) = -1 EINPROGRESS (Operation now in progress)
select(10, [9], [9], [9], {0, 200000})  = 0 (Timeout)
...
...
// 创建socket链接 scoket id = 10
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 10
...
...
connect(10, {sa_family=AF_INET, sin_port=htons(2180), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=10, events=POLLIN|POLLOUT|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=10, revents=POLLOUT}])
...
...
...
poll([{fd=10, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
sendto(10, "*3\r\n$3\r\nSET\r\n$5\r\nzhang\r\n$3\r\n123\r\n", 33, MSG_DONTWAIT, NULL, 0) = 33
poll([{fd=10, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=10, revents=POLLIN}])
recvfrom(10, "+", 1, MSG_PEEK, NULL, NULL) = 1
poll([{fd=10, events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 1 ([{fd=10, revents=POLLIN}])
recvfrom(10, "+OK\r\n", 8192, MSG_DONTWAIT, NULL, NULL) = 5
...
...
// 关闭socket链接 socket id = 10
close(10)                               = 0
...
write(4, "\1\6\0\1\0\251\7\0X-Powered-By: PHP/5.6.8\r\nContent-type: text/html; charset=UTF-8\r\n\r\n<pre class='xdebug-var-dump' dir='ltr'><small>boolean</small> <font color='#75507b'>true</font>\n</pre>\0\0\0\0\0\0\0\1\3\0\1\0\10\0\0\0\0\0\0\0\0\0\0", 200) = 200
shutdown(4, SHUT_WR)                    = 0
recvfrom(4, "\1\5\0\1\0\0\0\0", 8, 0, NULL, NULL) = 8
recvfrom(4, "", 8, 0, NULL, NULL)       = 0
close(4)                                = 0
...

 

© 著作权归作者所有

共有 人打赏支持
落叶纷飞v
粉丝 0
博文 11
码字总数 3712
作品 0
河源
高级程序员
redis学习#随便瞎玩的收获

2015年11月26日redis windows 下学习#乱玩心得(第一次写博客写的差别介意) 平常习惯用onenote 博文应该都是从里面翻出来的。 redis-2.4.5-win32-win64 这是我用的redis 有32位和64位的解压就...

toknTtok
2015/11/26
40
0
5.4. Database Extensions

mkdir /srv/php-5.2.17/etc/conf.d/srv/php-5.2.17/bin/phpize./configure --with-php-config=/srv/php-5.2.17/bin/php-configmake && make install cat > /srv/php-5.2.17/etc/conf.d/sqlit......

玄学酱
2017/12/27
0
0
phpredis中的connect和pconnect

http://blog.csdn.net/u013474436/article/details/53118475 参考地址: 现在不管是在缓存方面,还是NoSQL方面,Redis很火也很流行,但是使用方面的经验不是很多,包括Redis的一些优化配置,...

wjw555
2017/10/27
0
0
Windows下安装redis和在php中使用phpredis扩展

1、redis简介 redis是一个key-value存储系统。和Memcached类似,它支持存 储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类...

Junn
2014/06/18
0
0
关于redis的pconnect和connect使用场景有什么不同?

关于redis的pconnect和connect使用场景有什么不同? It event poll2017-05-1026 阅读 redis 关于redis的pconnect和connect,使用场景有什么不同?或者说,什么时候该用pconnect,什么时候用c...

It event poll
2017/05/10
0
0
mysql_connect和mysql_pconnect的区别

php中mysqlpconnect()的实现方式:其实mysqlpconnect()本身并没有做太多的处理,它唯一做的只是在php运行结束后不主动close掉mysql的连接。mysqlpconnect()与mysqlconnect()的区别包括:  ...

mac_zhao
2015/01/23
0
0
Memcache学习笔记

接触的第一个NOSQL,一般是作为数据库的缓存来使用,从而使二次查询不用直接访问数据库而是访问Memcache,速度更快。 1.Memcache类和Memcached类的区别 Memcache直接下载即可用,Mencached还...

taxilmc
2016/10/01
49
0
php使用redis作为session存储

PHP使用redis作为session存储方式 phpredis安装 phpredis的首页:https://github.com/phpredis/phpredis#installation 解压代码 执行以下命令 phpize./configuremake && make install 更改p......

PatrickWQy
2016/06/10
74
0
discuz 7.0 db_mysql.php 详解2

//禁止外部引用,即非本地使用. if(!defined('INDISCUZ')) { exit('Access Denied'); } class dbstuff { var $version = ''; //mysql版本号 var $querynum = 0; //执行次数 var $link; //mys......

五味格子
2011/05/11
0
0
基于PhalApi的Redis拓展

基于PhalApi的Redis拓展 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 编写本次拓展出于的目的是为了解决并不是非常熟悉redis的童鞋能够方便的使用redis进行...

喵了_个咪
2016/01/08
127
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

fiddle 4 初始化

下载 配置fiddle 4 如果证书导出失败,执行下面脚本 D:\programs\Fiddler>makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.c......

柯里昂
2分钟前
0
0
rabbitmq学习记录(六)交换机Exchange-direct

实现功能:一条消息发送给多个消费者 交换机模式:direct 相比于之前的fanout模式,可以进一步的筛选获取消息的消费者。 fanout模式下,只要消费者监听的队列,已经与接收生产者消息的交换机...

人觉非常君
18分钟前
0
0
Java 之 枚举

Java 中声明的枚举类,均是 java.lang.Enum 类的子类,Enun 类中的常用方法有: name() 返回枚举对象名称 ordinal() 返回枚举对象下标 valueOf(Class enumType, String name) 转换枚举对象 ...

绝世武神
27分钟前
0
0
使用爬虫实现代理IP池之放弃篇

啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的),白话说就是能联网并提供代理访问互联网的服务器,它提供的...

一别丶经年
43分钟前
0
0
sqoop导入数据到Base并同步hive与impala

使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 Sqool和Hive、HBase简介 Sqoop Hive HBase 测试Sqoop 使用Sqoop从MySQL导入数据到Hive 使用复杂SQL 调整Hive数据类型 不断更新 ...

hblt-j
今天
0
0
Dart 服务端开发 文件上传

clent端使用angular组件 upload_component.html form id="myForm" method="POST" enctype="multipart/form-data"> <input type="file" name="fileData"> <!-- file field --></form>......

scooplol
今天
0
0
apache和tomcat同时开启,乱码问题

tomcat和apache同时开启,会走apache的转发,执行的是AJP/1.3协议。所以在tomcat的配置文件server中, <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForU......

Kefy
今天
0
0
使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令

ssh-keygen 产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利 第一步...

xtof
今天
0
0
orcale 查询表结构

SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_name......

wertwang
今天
0
0
华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps、超级...

华为终端开放实验室
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部