文档章节

phpredis connect && pconnect分析

落叶纷飞v
 落叶纷飞v
发布于 2017/04/06 10:23
字数 632
阅读 97
收藏 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
48
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
1K
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

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
5
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部