点击上方蓝字每天学习数据库
首先来介绍一下今天的主角——Redis Pipelining。该功能是为了解决因为客户端和服务器的网络延迟造成的请求延迟。
Redis Pipelining在很早就出现了,如果你在用较早版本的Redis,那么也能使用这个功能。此功能可以将一系列请求连续发送到Server端,不必等待Server端的返回,而Server端会将请求放进一个有序的管道中,在执行完成后,会一次性将返回值再发送回来。
对于这么神奇的功能,我们怎么能不测一下pipeline对于性能的提升有多大呢?
一、pipeline有多神奇
**测试方法:**对redis分别用顺序写入和pipeline 的方法写入一个微秒级的时间戳,一共写1W个数据,去看这1W 条数据的执行时间。
**测试结果:**pipeline写入与顺序写入的所消耗的时间对比。
**分析:**pipeline和顺序写入最大的区别就是在于pipeline的打包发送数据,网络开销要小很多。在下面的测试中,values很小(20+Byte),而且网络开销也不算大(同乐访问坪山),访问命令也不重(set),但是执行的效率却是天差地别,**顺序写入的执行时间是pipeline的16.8倍!**而在现网环境下,随着网络开销的增大,values值的增大,重命令的增加,这个比例将变得更加恐怖。
1、pipeline写入10000个数据(values = 微秒+时间戳),共用时450ms
2、redis->set()顺序写入,(values = 微秒+时间戳),共用时:7.56s
二、对于pipeline读延时问题的优化
腾讯天天快报业务在使用Redis方面非常专业,在批量导入数据的时候就是使用了pipeline,使得数据能够快速的导入。但是在运营过程中我们发现,pipeline一次打包大量的写入的命令阻塞了同proxy的其他业务的读命令,使得其他业务的读命令延时升高。这个时候就不得不想办法优化这个问题。
首先贴出结论:
建议在pipeline写入的时候,参照“打小包,短sleep的”策略写入。这样能够避免pipeline写入时,由于阻塞造成的读延时问题。
测试开始:
1、 vaule=1K sleep=20ms pipeline_num=10000 get_qps=1500
get命令的平均延时在0.1ms,max到18ms,说明redis在pipeline程序sleep的着20ms中,快速的执行了堆积的get命令。如果把sleep值调小会是什么情况呢?
2、get/set 测试:vaule=1K sleep=0ms pipeline_num=10000 get_qps=1500
在pipeline打包的时间内,get指令就已经执行完了,所以我们可以看到,set的平均延时很长,达到了9ms,已经影响到了写入,所以,我们要调小每次打包的数据量。
4、get/set 测试:vaule=1K sleep=0ms pipeline_num=1000 get_qps=1500
当把每次的打包量调到1000个命令的时候,就可以明显的看出在写入性能上的优化,写入的平均时间从9ms下降到了0.8ms。
5、get/set 测试:vaule=1K sleep=0ms pipeline_num=1000 get_qps=6000
为了测试的全面考虑,我们增大了读命令的qps,读命令和写命令都仅有一点点的延时升高,这个是可以接受的。
所以在使用pipeline的时候,参照“打小包,短sleep的”策略,是一个可以选择的方式。
三、测试总结
get set 命令
在get_qps = 6000的时候,pipeline一次打包1000个set命令,每个val大小1K,sleep=0 得到的读写速度都不错,在不算网络开销的情况下,get速度在0.1ms ,set 速度在1ms。
往期推荐
免费试用
包括云数据库MySQL在内的40+款热门云产品,实名认证的企业用户可免费试用!1000M内存50G数据盘的MySQL可免费体验30天,点击左下角“阅读原文”立即领取~
↓↓点“阅读原文”免费试用
好文和朋友一起看!
var first_sceen__time = (+new Date());if ("" == 1 && document.getElementById('js_content')) { document.getElementById('js_content').addEventListener("selectstart",function(e){ e.preventDefault(); }); } (function(){ if (navigator.userAgent.indexOf("WindowsWechat") != -1){ var link = document.createElement('link'); var head = document.getElementsByTagName('head')[0]; link.rel = 'stylesheet'; link.type = 'text/css'; link.href = "//res.wx.qq.com/mmbizwap/zh_CN/htmledition/style/page/appmsg_new/winwx45ba31.css"; head.appendChild(link); } })();
[图片]
张松坡
长按二维码向我转账
受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。
阅读
分享 在看
已同步到看一看
朋友会在“发现-看一看”看到你“在看”的内容
确定
已同步到看一看写下你的想法
最多200字,当前共字 发送
已发送
朋友将在看一看看到
确定
写下你的想法...
取消
发布到看一看
确定
最多200字,当前共字
发送中
[图片]
微信扫一扫 关注该公众号
[图片]
微信扫一扫 使用小程序
即将打开""小程序
[取消](javascript:void(0%29;) [打开](javascript:void(0%29;)