redis php 书,predis VS phpRedis
predis与phpRedis是php连接redis最常用的两个包。在工作项目中,由于十分依赖redis,因此比较predis与phpRedis两者之间的性能差异。
写在前面
测试所用代码地址-github
测试环境
1.redis: Redis server v=2.9.11
2.php: PHP 7.1.29 (cli) (需安装 PHPRedis 扩展)
3.机器信息:Mac i5 8G内存
单机测试
分别顺序执行5W次redis写命令,比较他们的时间(ms)。
虽有一定差别,但差别不大。
次数
predis
phpRedis
5w
3000
2999
5w
3000
3000
10w
6000
6000
10w
5001
5999
50w
34999
33001
50w
32000
28999
并发测试
写API,读写一定量key,统计时间。并使用ab并发测试,比较两者区别。
总次数
并发数
读写数
predis
phpRedis
备注
1000
100
2000
333968
309012
redis变卡,可能有大量等待
5000
100
200
203008
201993
redis变卡,可能有大量等待
5000
50
200
234967
177043
差距变大
5000
100
20
25002
14007
差距继续扩大,猜测phpredis 在建立连接可能更快
5000
100
20
20996
13003
同上
5000
100
2
7000
4999
5000
100
2
10002
4999
5000
100
1
10996
2001
基本确定是建立连接 耗时差距
5000
100
1
7999
2001
// 随机建立连接
$t = rand(0,1);
if ($t == 0) {
$this->testRedis(new phpRedisConn());
}else{
$this->testRedis(new PredisConn());
}
// 测试代码
private function testRedis(conn $conn)
{
$mode = $conn->getMode();
$startTime = Comm::getMillisecond();
Comm::PrintEcho("string 测试开始..." . "当前时间:" . $startTime . " 测试方式:" . $mode);
for ($i = 0; $i < self::NUM; $i++)
{
$conn->set($conn->getMode(), $i);
}
$endTime = Comm::getMillisecond();
$useTime = $endTime - $startTime;
$conn->incrby("useTime_" . $mode, $useTime);
Comm::PrintEcho("string 测试结束..." . "消耗时间:" . $useTime . " 测试方式:" . $mode);
}
复用连接
phpRedis较predis还有一个有点,就是phpredis实现了pconnect()。pconnect在redis结束后,不会销毁redis连接,直到空闲超时自动断开。pconnect是依赖与php-fpm进程的,进程不死,connect就会存在。
/*
* $host redis IP $port redis 端口
* $timeout 默认无限(进程销毁或者redis超时断开)
* $persistent_id 连接标示 新的标示 建立新连接
*/
public function pconnect( $host, $port = 6379, $timeout = 0.0, $persistent_id = null )
// 加入新的连接方式
$t = rand(0,2);
if ($t == 0) {
$this->testRedis(new phpRedisConn());
}elseif ($t == 1)
{
$this->testRedis(new PredisConn());
}elseif ($t == 2)
{
$this->testRedis(new phpRedisPconn());
}
总次数
并发数
读写数
predis
phpRedis
phpRedisPconn
备注
5000
100
200
70982
64999
62002
与上面时间因为执行次数有差别 三者对比即可
5000
50
200
62985
42004
52021
这种方案下,connect更快~
5000
50
200
74992
52001
54997
又测试了一次
5000
100
20
8997
7007
9997
好奇怪~
5000
100
20
10999
7997
11995
5000
100
2
5996
4004
4996
5000
100
2
5000
4998
2000
5000
100
1
5000
4999
1999
5000
100
1
4001
2999
3997
5000
100
1
7001
4996
2001
猜测是不是跟fpm销毁有关,增加并发总次数(并且修改每次计算毫秒的小数点位数 5位)
15000
100
1
11995
5997
5007
有差距,但差距不大
15000
100
1
11995
8005
7000
在测试中,当高并发时,pconnect 可能会又更好的效果,但是并发低的话,connect会更快一些。
另外,pconnect连接数是和fpm数目相关联的。
redis php 书,predis VS phpRedis相关推荐
- redis客户端 predis与phpredis 比较
predis目录中有一个FAQ.markdown文件,FAQ中文意思经常问到的问题,该文档对redis的客户端predis和phpredis进行了比较分析,优点,不足做了说明,还是老外的文档清楚,一看 ...
- redis php 书,PHP-redis中文文档
Redis::__construct构造函数 $redis = new Redis(); connect, open 链接redis服务 参数 host: string,服务地址 port: int, ...
- php连接redis报错,PHP使用phpredis链接redis错误
如题, 项目中使用phpredis链接 redis,偶尔报如下错误: PHP Fatal error: Uncaught exception 'RedisException' with message ...
- predis.php,phpredis和predis之间有何区别?phpredis和predis的区别对比
本篇文章给大家带来的内容是关于phpredis和predis之间有何区别?phpredis和predis的区别对比,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. phpredis和p ...
- redis php 书,php中redis的使用
转自:http://bbs.redis.cn/forum.php?mod=viewthread&tid=481 phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模 ...
- linux redis 简书,Linux | Redis
写在前面的话 常言道,不作笔记不读书.在下是深有体会啊,所以,跟我一起做下本节的笔记吧,或许多年以后,你一定会感谢今天的你. 安装 在官网的下载页 Redis Download 直接写了在Linux的 ...
- 安装phpredis扩展以及phpRedisAdmin工具
先从phpredis的git拿到最新的源码包: wget https://github.com/nicolasff/phpredis/archive/master.tar.gz 然后解压到进入目录 ...
- predis如何实现phpredis的pconnect方法
predis和phpredis都是redis的php客户端,区别可以看这里,这里不赘述. phpredis是php扩展,由C语言编写,诞生较早,很多PHPer都熟悉. predis是用PHP语言编写, ...
- 利用predis操作redis方法大全(方便自己使用)
predis是php连接redis的操作库,由于它完全使用php编写,大量使用命名空间以及闭包等功能,只支持php5.3以上版本,故实测性能一般,每秒25000次读写,相信改换c语言编写的php扩展后 ...
最新文章
- windows下多版本python安装与pip安装和pip使用 吐血总结
- C#初学——doWhile
- 64% 的企业未实现智能化,5成公司算法工程师团队规模小于 10人,AI 工程师的机遇在哪里?...
- 吴恩达新动作:建立全新机器学习资源Hub,「以数据为中心的AI」大本营
- 用flex进行网易云音乐界面构建和布局解析(2)
- int * * a[10] int * (*a)[10]和 int(*a[10])() 是什么意思
- Vue页面加载使用二级属性的时候报错TypeError: Cannot read property ‘name‘ of undefined“
- linux挂载磁盘分区,Linux 新磁盘分区与挂载
- rman report 命令
- linux常用的脚本、命令
- Tecplot 360 按教程安装完毕后,弹出“Is your Tecplot 360 EX liense valid?”【终极解决办法】
- 7-1 作业调度算法--先来先服务 (30 分)(思路+详解+vector+map+map做法)Come Baby!!!!!!!!!!!
- [XSY]Tree Ext(矩阵树定理,拉格朗日插值,最小生成树,二分)
- C#提取网页中的超链接
- DB2 SQLCODE=-803,SQLSTATE=23505,SQLERROR=1
- stm32f103c8t6开发版点亮oled屏幕工程文件_OLED液晶屏如何显示中文呢
- 联想i微型计算机怎么拆,联想t410i如何拆机?联想t410i拆机方法【图文】
- 计算机232 数据传输,RS232串口通信的传输格式和接收过程
- 李洪强和你一起学习前端之面试题
- 华为云桌面---cloudclient安装使用