首页 > 其他 > 详细

redis 学习 - 流水线

时间:2020-03-31 11:10:25      阅读:54      评论:0      收藏:0      [点我收藏+]

本篇已收录至redis in action 学习笔记系列

流水线 pipelining 在 redis 中指的是可以在一次客户端与服务端的通信完成多个 redis 写入操作, 进而提升效率. redis 的事务实际上底层是依赖了流水线机制, 那么非事务情况下怎么使用.

非事务型流水线

redis 有很多命令是可以通过一个命令将多个成员写入到 server 中的. 比如 hmset, hmget, mget, mset, rpush, lpush等, 这些命令简化了需要重复执行相同命令的操作, 并且极大的提升了性能.

为什么不一直使用事务去提升性能

因为事务所使用的 multi 和 exec 的问题, 它们俩同样会消耗资源, 因为 server 在处理事务时, 不能处理其他的命令.

需要举出实例证明流水线为性能带来的提升

这里引用 redis in action 书中实例:

技术分享图片

一个 update user token 的操作函数, 原逻辑中包含了每次执行可能会与 server 通信 2-5 次的操作. 所以这个函数需要 2 - 10 ms 去完成. 按照这个速度来计算, 单个服务器每秒可以处理 100 - 500 个请求.

看一下使用流水线优化的函数:

技术分享图片

此时一次update操作, 与 server 的通讯次数降低了 1/2 或者 1/5, 那么每秒钟 server 能够处理的请求就提高至 500 - 1000 个请求.

理论上看, 这个提升已经很不错了. 那么经过实际测试呢. 作者使用了两个 client 环境模拟测试, 一个是低延迟网络环境, 另外一个是慢速高延迟网络环境, 访问的都是同一个 server.

测试代码:

技术分享图片

测试结果如下:

技术分享图片
技术分享图片

可以看到, 如果收到网络环境的影响, 效率与性能问题的相差还是很明显的.

redis 学习 - 流水线

原文:https://www.cnblogs.com/it-dennis/p/12571286.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!