1、以前正常使用过程

客户端向服务器发送查询,并从套接字读取,通常以阻塞的方式,用于服务器响应。

服务器处理命令并将响应发送回客户端。

也就是每个命令都会有一来以往的过程

2、管道的意义

如果能将连续执行的redis命令在操作完成后统一返回,就可以减少连接数,从来减少延迟时间,那么管道也就产生了。

管道的基本含义是,客户端可以向服务器发送多个请求,而不必等待回复,并最终在一个步骤中读取回复。

3.参数说明:

Redis::MULTI或Redis::PIPELINE. 默认是 Redis::MULTI

Redis::MULTI:将多个操作当成一个事务执行

Redis::PIPELINE:让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证

测试代码1:

<?php
set_time_limit(0);
ini_set('memory_limit', '1024M'); $redis = new Redis(); G('1');
$redis->connect('127.0.0.1');
//不具备原子性 ,管道
$redis->pipeline();
for ($i = 0; $i < 100000; $i++) {
$redis->set("test_{$i}", pow($i, 2));
$redis->get("test_{$i}");
}
$redis->exec();
$redis->close();
G('1', 'e'); G('2');
$redis->connect('127.0.0.1');
//事物具备原子性
$redis->multi();
for ($i = 0; $i < 100000; $i++) {
$redis->set("test_{$i}", pow($i, 2));
$redis->get("test_{$i}");
}
$redis->exec();
$redis->close();
G('2', 'e'); //普通
G('3');
$redis->connect('127.0.0.1');
//事物具备原子性
for ($i = 0; $i < 100000; $i++) {
$redis->set("test_{$i}", pow($i, 2));
$redis->get("test_{$i}");
}
$redis->close();
G('3', 'e'); function G($star, $end = '')
{
static $info = array();
if (!empty($end)) {
$info[$end] = microtime(true);
$sconds = $info[$end] - $info[$star];
echo $sconds, "ms" ;
echo PHP_EOL;
} else {
$info[$star] = microtime(true);
}
}

结果输出:

0.85941696166992ms 14.938266992569ms 15.121881961823ms

测试代码2:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$pipe = $redis->multi(Redis::PIPELINE);
for ($i = 0; $i < 3; $i++) {
$key = "key::{$i}";
print_r($pipe->set($key, str_pad($i, 2, '0', 0)));
echo PHP_EOL;
print_r($pipe->get($key));
echo PHP_EOL;
}
$result = $pipe->exec();
echo "<pre>";
var_dump($result);

输出结果:

Redis Object ( ) Redis Object ( ) Redis Object ( ) Redis Object ( ) Redis Object ( ) Redis Object ( )

array(6) {

[0]=>

bool(true)

[1]=>

string(2) "00"

[2]=>

bool(true)

[3]=>

string(2) "01"

[4]=>

bool(true)

[5]=>

string(2) "02"

}

redis性能提升之pipeline的更多相关文章

  1. redis性能提升

    1.redis请求执行原理redis客户端与redis服务器之间使用TCP协议进行连接,一个科幻可以通过一个socket连接发送多个请求命令,但每个请求命令发出后client通常会阻塞并等待redis ...

  2. redis为什么要提供pipeline功能

    通常我们用redis做接口缓存后,查询接口的性能就能提升到ms级别: 但是redis是纯内存操作啊,总不至于要到ms吧,根据官方的 benchmark 单实例也是能抗 7w+ qps 也就是说单个re ...

  3. Redis大幅性能提升之Batch批量读写

    Redis大幅性能提升之Batch批量读写 提示:本文针对的是StackExchange.Redis 一.问题呈现 前段时间在开发的时候,遇到了redis批量读的问题,由于在StackExchange ...

  4. memcache 与 redis 为web app 带来的性能提升

    memcache 与 redis 为web app 带来的性能提升 参考: 1. http://www.cnblogs.com/ToDoToTry/p/3513688.html

  5. Redis性能问题排查解决手册(七)

     阅读目录: 性能相关的数据指标 内存使用率used_memory 命令处理总数total_commands_processed 延迟时间 内存碎片率 回收key 总结 性能相关的数据指标 通过Red ...

  6. redis学习笔记之pipeline

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常 会阻塞并等待redi ...

  7. Redis性能问题排查解决手册

    转自:http://www.cnblogs.com/mushroom/p/4738170.html 阅读目录: 性能相关的数据指标 内存使用率used_memory 命令处理总数total_comma ...

  8. 关于redis性能问题分析和优化

    一.如何查看Redis性能 info命令输出的数据可以分为10个分类,分别是: server,clients,memory,persistence,stats,replication,cpu,comm ...

  9. Redis(二十一):Redis性能问题排查解决手册(转)

    性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输出的数 ...

随机推荐

  1. 虹软SDK在nodejs中的集成

    ==虹软官网地址== http://www.arcsoft.com.cn 在官网注册账号,并且申请人脸识别激活码, 选择SDK版本和运行系统(windows/linux/android/ios) ,我 ...

  2. webview元素定位

    genymotion 模拟器:android  5.0.0 python 2.7 appium 1.4.16.1 1.app原生元素定位(常用) driver.find_element_by_id(“ ...

  3. 雷林鹏分享:jQuery EasyUI 数据网格 - 启用行内编辑

    jQuery EasyUI 数据网格 - 启用行内编辑 可编辑的功能是最近添加到数据网格(datagrid)的.它可以使用户添加一个新行到数据网格(datagrid).用户也可以更新一个或多个行. 本 ...

  4. Python下探究随机数的产生原理和算法

    资源下载 #本文PDF版下载 Python下探究随机数的产生原理和算法(或者单击我博客园右上角的github小标,找到lab102的W7目录下即可) #本文代码下载 几种随机数算法集合(和下文出现过的 ...

  5. selenium java ,执行js改变页面

    1.面对页面一些页面上的限制而导致某些选择按钮无法选中的问题 很多时候由于页面上的一些限制会导致我们无法无法正常用webdriver来实现我们手动的正常操作,这时候我们可以通过执行js来适当的改变页面 ...

  6. Mysql按周,按月,按日,按小时分组统计数据

    按周   select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks;   ...

  7. ABAP基础一:ALV基础之ALV的整体结构

    很久没摸ECC了,最近看到很多新人在捯饬ALV...中国就喜欢量产垃圾...培训,上岗...没有行业道德... 闲话不多说,开始正事: ALV很常见,在SAP非WEB的项目,没有不用的,它包含了报表和 ...

  8. 常用模块Part(1)

    collections模块 time模块 random模块 os模块 sys模块 collections模块 这个模块实现了一些很好的数据结构,它们能帮助你解决各种实际问题 在这里主要介绍几种数据结构 ...

  9. UVa Live 4794 - Sharing Chocolate 枚举子集substa = (s - 1) & substa,记忆化搜索 难度: 2

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  10. C# 语句中的各种单例模式代码

    1.非线程安全(经典模式),但没有考虑线程安全,在多线程时可能会出问题,不过还从没看过出错的现象. /// <summary> /// 单例模式的实现 /// </summary&g ...