redis 使用管道提升写入的性能[pipeline]
看了手册的都知道multi这个命令的作用就好比是mysql的事务的功能,但是大家都知道事务吗,就是在操作的过程中,把整个操作当作一个原子来处理,避免由于中途出错而导致最后产生的数据不一致,而产生BUG ,Mysql的事务功能可以做到这点,但是在redis中的multi,手册中说是把多个命令当作个事务来处理,但是在真正的测试之后发现并没有所说的事务的功能,个人经过测试发现,只有把他watch命令结合起来用,方可显现出其具有事务的功能,所以这点很是迷惑,关键是有一点很诧异,当启用了multi命令之后整个redis的读写会相对于没有使用multi的的读写要慢一点,我通过读写100W条数据发现,他们的速度相差600多毫秒,搞不清楚为什么相差这么多!个人觉得没有必要,还是不要使用这个multi的为好!
至于redis的pipeline命令,看手册都知道,它能够让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证,能不能保证原子性这个我没有测试,但是这个速度我测试了下,确实是吃了一惊啊!相比于没有使用pipeline的读写操作,使用了pipeline命令的操作要快12倍不止啊!这个效率高的。。。。
下面是我的测试代码:欢迎拍砖。
<?php set_time_limit(0); //计时函数
function G($start,$end='',$dec=4)
{
static $_info = array();
if (!empty($end))
{
if(!isset($_info[$end])) $_info[$end] = microtime(TRUE);
$sconds = number_format(($_info[$end]-$_info[$start]), $dec) * 1000;
echo "{$sconds}ms<br />";
}
else
{
$_info[$start] = microtime(TRUE);
}
} $redis = new Redis();
$redis->connect('127.0.0.1'); G('t');
$redis->pipeline();
for ($i=0; $i < 100000 ; $i++) {
$redis->set("test_{$i}", pow($i, 2));
$redis->get('test_{$i}');
}
$redis->exec();
G('t','r'); G('m');
$redis->multi();
for ($i=0; $i < 100000 ; $i++) {
$redis->set("test_{$i}", pow($i, 2));
$redis->get('test_{$i}');
}
$redis->exec();
G('m','i'); $redis->flushdb(); G('f');
for ($i=0; $i < 100000 ; $i++) {
$redis->set("test_{$i}", pow($i, 2));
$redis->get('test_{$i}');
}
G('f','e'); ?>
这是返回的结果:
//pipeline的执行时间
1926.5ms
//multi的执行时间
27725.7ms
//正常情况下
24832.1ms
redis 使用管道提升写入的性能[pipeline]的更多相关文章
- 使用Redis管道提升性能
首发于 樊浩柏科学院 Redis 的 管道 (pipelining)是用来打包多条无关命令批量执行,以减少多个命令分别执行带来的网络交互时间.在一些批量操作数据的场景,使用管道可以显著提升 Redis ...
- memcache 与 redis 为web app 带来的性能提升
memcache 与 redis 为web app 带来的性能提升 参考: 1. http://www.cnblogs.com/ToDoToTry/p/3513688.html
- 第三百零一节,python操作redis缓存-管道、发布订阅
python操作redis缓存-管道.发布订阅 一.管道 redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pi ...
- Jmeter 压力测试笔记(3)--脚本调试/签名/cookie/提升吞吐量/降低异常率/提升单机并发性能
import XXXsign.Openapi2sign;---导入jar包中的签名方法 String str1 = "12121"; ---需要被签名的字段:向开发了解需要哪些哪些 ...
- psutil 是因为该包能提升 memory_profiler 的性能
python 性能分析入门指南 一点号数据玩家昨天 限时干货下载:添加微信公众号"数据玩家「fbigdata」" 回复[7]免费获取[完整数据分析资料!(包括SPSS.SAS.SQ ...
- 提升VMware虚拟机性能招数
在VMware虚拟机(VMware Workstation或VMware Server)中我们可以同时运行多个Guest OS,当同时在同一Host OS中运行多台虚拟机时势必会严重影响到Host O ...
- jQuery 做好七件事帮你提升jQuery的性能
1. Append Outside of Loops 凡是触及到DOM都是有代价的.如果你向DOM当中附加大量的元素,你会想一次性将它们全部附加进来,而不是分多次进行.当在循环当中附加元素就会产生一个 ...
- 如何提升 CSS 选择器性能
CSS 选择器性能损耗来自? CSS选择器对性能的影响源于浏览器匹配选择器和文档元素时所消耗的时间,所以优化选择器的原则是应尽量避免使用消耗更多匹配时间的选择器.而在这之前我们需要了解CSS选择器匹配 ...
- 七个可以提升python程序性能的好习惯,你知道吗?
掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费.今天就为大家带来七个可以提升python程序性能的好习惯,赶快来学习吧:. 1.使用局部变量 尽量使用局部变量代替全局变量:便 ...
随机推荐
- 面试题:get和post的本质区别
前言:相信小伙伴们面试时候一定都遇到过这个问题,即使没有遇到过,至少也听说过,网上资料一大片,大概每个人都能说出来一些.但是总感觉面试装逼不成功,所以就翻阅了部分资料,进一步整理了下. 一般当我们提到 ...
- 一个具有缓存数据功能的HttpWebRequest工具类
背景:一个公共站点中的数据,供其它子站点共享,为了提高性能,简单实现了Http 1.1的缓存功能 特点:可以缓存Html数据到内存中;缓存具有过期时间;缓存过期后,通过再确认的方式来决定是否更新缓存; ...
- sqlite3数据库的简要应用
Sqlite3数据库升级方案的变化. 1, 若是讲要升级的数据库版本更高,则从低版本数据库中拷贝与新数据库相同字段的内容,其他字段按照默认值创建.A->B->C这样逐个版本升级,每个版本 ...
- 写一个栈,实现出栈、入栈、求最小值,时间复杂度为O(1)
#-*-coding:utf-8-*- ''' 需求:写一个栈,实现出栈.入栈.求最小值,时间复杂度为O(1) 思路:通过两个栈实现,一个栈stack,一个辅助栈min_stack,记录stack中的 ...
- POJ - 1753 Flip Game(状压枚举)
https://vjudge.net/problem/POJ-1753 题意 4*4的棋盘,翻转其中的一个棋子,会带动邻接的棋子一起动.现要求把所有棋子都翻成同一种颜色,问最少需要几步. 分析 同一个 ...
- CSS3 - chrome,傲游,360极速浏览器不支持小于12px的字号的解决办法
google流量器chrome,傲游,360极速浏览器都是基于webkit内核浏览器,默认不支持小于font-size小于12px 的字号,即定义font-size小于12px时会发现字体大小依然是1 ...
- 一主多从+Binlog Server,主库故障无法访问,如何在从库中选举一个新主库
一.基本环境 VMware10.0+CentOS6.9+MySQL5.7.19 ROLE HOSTNAME BASEDIR DATADIR IP PORT M ZST1 /usr/local/mysq ...
- Ettercap之ARP+DNS欺骗
1.网络攻击拓扑环境 网关:192.168.133.2 攻击者:192.168.133.128 受害者:192.168.133.137 2.原理讲解 ARP欺骗 简介:ARP(Address Reso ...
- Dream_Spark定制第二课
Spark版本定制第2天:通过案例对SparkStreaming透彻理解之二 本期内容: 1 解密Spark Streaming运行机制 2 解密Spark Streaming架构 一切不能进行实时流 ...
- 使用/dev/uinput的简要介绍(含demo程序)【转】
转自:https://blog.csdn.net/zhongkunjia/article/details/75142699 uinput机制有2个很大的优点: 1) 不用自己写驱动(比如弄个红外遥控器 ...