redis 中pipline,mset, mget使用对比
redis 中pipline,mset, mget使用对比
redis 中是支持 pipline的,它是管道的概念,也就是多次执行,一次返回。加快了执行的速度。
今天来试一下,如何使用管道
$redis = new Redis();
$pipe = $redis->multi(Redis::PIPELINE);
for ($i = 0; $i < 10000; $i++) {$pipe->set("key::$i", str_pad($i, 4, '0', 0));$pipe->get("key::$i");
}
$replies = $pipe->exec();
var_dump($replies)
这样就完成了一个管道多次取值。
打印下这个值:
Array
([0] => 1[1] => 0000[2] => 1[3] => 0001[4] => 1[5] => 0002[6] => 1[7] => 0003[8] => 1[9] => ......
第一个key是 set 返回的值,1表示成功。第二是get到的值。
看下和传统的对比下执行速度:
$s1 = microtime(true);$redis = Rcache::init();
$pipe = $redis->multi(Redis::PIPELINE);
for ($i = 0; $i < 10000; $i++) {$pipe->set("key::$i", str_pad($i, 4, '0', 0));$pipe->get("key::$i");
}
$replies = $pipe->exec();$s2 = microtime(true);
echo $s2 - $s1;$s3 = microtime(true); echo PHP_EOL;for ($i=0; $i < 10000 ; $i++) {$redis->set("key1::$i", str_pad($i, 4, '0', 0));$redis->get("key1::$i");
}$s4 = microtime(true);
echo $s4 - $s3;
打印下时间:
0.149090051651
38.773063898087
快了380倍!!! 厉害啊。
其实,mset和mget也可以实现多次复制,多次取值的操作:
for ($i=0; $i < 10000 ; $i++) {$mset["key1::$i"] = str_pad($i, 4, '0', 0);$mget[] = "key1::$i";
}
$redis->mset($mset);
$result = $redis->mget($mget);
也可以达到相同的效果。和 pipline对比下看看?
$s1 = microtime(true);$redis = Rcache::init();
$pipe = $redis->multi(Redis::PIPELINE);
for ($i = 0; $i < 10000; $i++) {$pipe->set("key::$i", str_pad($i, 4, '0', 0));$pipe->get("key::$i");
}
$replies = $pipe->exec();$s2 = microtime(true);
echo $s2 - $s1;$s3 = microtime(true); echo PHP_EOL;for ($i=0; $i < 10000 ; $i++) {$mset["key1::$i"] = str_pad($i, 4, '0', 0);$mget[] = "key1::$i";
}
$redis->mset($mset);
$result = $redis->mget($mget);$s4 = microtime(true);
echo $s4 - $s3;
看下时间对比:
0.12792420387268
0.066974878311157
0.12186408042908
0.074720859527588
0.08265495300293
0.095463037490845
发现有时候, mget更快。厉害了。
然后,如果for 循环 次数越多,其实,mset和mget更快。
redis 中pipline,mset, mget使用对比相关推荐
- Redis中数据结构和编码详细图解(应用场景及优缺点)
专业术语 sds:simple dynamic string 简单动态字符串,redis自己开发的一个字符串的抽象类型 embstr:embedded sds string embstr编码的SDS, ...
- 【Java从0到架构师】Redis 进阶 - pipline、发布订阅、Bitmap、HyperLogLog、GEO
Redis 原理与实战 Jedis 的基本使用 Redis 数据淘汰策略 Redis 进阶拓展 pipline - 命令批处理,减少大量命令的网络开销,提高操作性能 发布订阅 - subscribe ...
- [转载] python怎么获取redis中的数据_python操作redis数据库
参考链接: 使用Python在Selenium中进行非阻塞等待 3.redis基本命令 String set(name, value, ex=None, px=None, nx=False, xx=F ...
- Redis中字符串string数据类型(保存(设置键值、过期时间、设置多个键值、追加值)、获取(获取单一键值、获取多个键值))
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的V ...
- Redis 中 Lua 脚本的应用和实践
引言 前段时间组内有个投票的产品,上线前考虑欠缺,导致被刷票严重.后来,通过研究,发现可以通过 redis lua 脚本实现限流,这里将 redis lua 脚本相关的知识分享出来,讲的不到位的地方还 ...
- redis中各种数据类型对应的jedis操作命令
2019独角兽企业重金招聘Python工程师标准>>> redis中各种数据类型对应的jedis操作命令 博客分类: 缓存 http://www.fwqtg.net/redis%E4 ...
- php redis type,redis中的几种常用基础对象介绍
一:前言 redis中有几种常用的基础对象,如string.hash.list.set.zset等,下面我们就来介绍下他们的底层实现数据结构与常见应用场景和特点. 二:redisobject 源码位置 ...
- Redis中的数据类型及其应用场景
redis中有哪些数据类型?这个问题我被面试官问过好多次了,下面总结下这5种数据类型的特点,命令,还有应用场景 redis客户端的一些通用命令: ping # 测试redis是否链接 如果已链接返回 ...
- Redis中五大基本数据类型和三种特殊数据类型详解
目录 介绍 概念 基本命令 redis是单线程的 五大基本数据类型 String 命令 应用场景 List 命令 应用场景 Set 命令 应用场景 Hash 命令 应用场景 Zset 命令 应用场景 ...
- redis中各种数据类型对应的jedis操作命令、redis命令大全
一.常用数据类型简介: redis常用五种数据类型:string,hash,list,set,zset(sorted set). 1.String类型 String是最简单的类型,一个key对应一个v ...
最新文章
- 初学Golang:channel的使用
- LeetCode Contains Duplicate II(hash)
- 调用startActivityForResult后,onActivityResult无响应的题目
- X5开发中buttongrounp对应contents组件切换时速度快点无效
- JAVA中toString方法的作用(转)
- 协方差理解,PCA以及奇异值分解(SVD)
- 初二物理模型有哪些_暑假新初二、新初三的数学该怎么学,教辅怎么买,题该怎么刷?看这里~...
- java基础-java语言中的关键字总结
- python没有错误但是不显示结果_解决Pycharm无法显示matplotlib绘图问题
- ffmpeg源码分析_ffmpeg音视频同步的几种策略
- SPSS 简单线性回归(图文+数据集)【SPSS 025期】
- linux系统新磁盘可视化挂载方法
- 深度linux升级,测试从Deepin Linux 15升级到Deepin Linux v20
- Qml使用阿里字体图标库及FontAwesome字体图标库
- layui 模板判断_浅谈layui使用模板引擎动态渲染元素要注意的问题
- switch integer java_switch case 支持的 6 种数据类型!
- [MySQL进阶]——索引的数据结构
- 谷歌学术得到论文被引用信息
- 使用Pycharm设置python脚本文件头
- 手机计算机文档如何发到手机上,电脑的word文档怎么传到手机上
热门文章
- CCNA系列十一之Frame-Relay
- codevs2822 爱在心中(tarjan求缩点的度)
- 记:应聘锐明科技 C++工程师(两个月前就该发了)
- Schema hasn't been registered for model 解决方案
- 摩托罗拉被曝裁员超一半 联想多品牌失败了吗?
- CentOS7搭建邮件服务器+Roundcube webMail
- VM虚拟机安装Windows XP Service Pack 3 (x86)
- CC++初学者编程教程(6) 配置WindowsXP虚拟机与VC6.0
- 终端的乐趣--Linux下有趣的终端命令或者工具
- [转]美国大杏仁并不是杏仁,而是扁桃仁