文档章节

phpredis connect && pconnect分析

落叶纷飞v
 落叶纷飞v
发布于 2017/04/06 10:23
字数 632
阅读 84
收藏 1

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

没有更多内容

加载失败,请刷新页面

加载更多

GO冒泡,二分查找

package mainimport("fmt")func main() {var arr [5]int = [5]int{11,13,9,2,25}maopao(&arr)fmt.Println("arr = ", arr) //[2 9 11 13 25]findIndex := binaryFind(&arr, 0......

汤汤圆圆
8分钟前
1
0
工作2年半跳槽面试阿里,成功拿到offer,凭什么?

2015年刚毕业的我,进入了一家小小的公司实习工作,在学校学了三年软件开发的我,还是想去寻找一份互联网行业的工作,这样更能学以致用发挥自己的特长。一直到18年三月份,我辞掉已有的工作,...

java知识分子
12分钟前
1
0
讲述下:Linux的10个最危险的命令

导读 Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。这篇文章将会向你介绍十条命令,但你最好不要尝试着去使用。 当然,以下命令通常都...

问题终结者
16分钟前
1
0
分库分表后如何部署上线?

引言 我们先来讲一个段子 面试官:“有并发的经验没?” 应聘者:“有一点。” 面试官:“那你们为了处理并发,做了哪些优化?” 应聘者:“前后端分离啊,限流啊,分库分表啊。。” 面试官:...

Java烂猪皮
21分钟前
1
0
Redis源码阅读笔记-快速列表

快速列表 快速列表(quicklist)是由压缩列表(ziplist)组成的一个双向链表,链表中,每一个节点都是以压缩列表(ziplist)的结构保存。 在 Redis3.2 后加入的新数据结构,在列表键中取代了双向链...

Jian_Ming
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部