为啥Redis使用pipelining会更快
为啥Redis使用pipelining会更快?
这是一个很考究细节的问题,大部份人都会说:由于减少了网络开消,那末,看以下例子:
import time import redis client = redis.Redis(decode_responses=True) count = 10000 def no_pipelining(): for i in range(count): client.set("test:nopp:{}".format(i), i, ex=100) def with_pipelining(): pp = client.pipeline() for i in range(count): pp.set("test:withpp:{}".format(i), i, ex=100) pp.execute() if __name__ == "__main__": start = time.time() no_pipelining() mid = time.time() with_pipelining() end = time.time() print("no_pipelining: {} seconds; with_pipelining: {} seconds".format(mid - start, end - mid))
为何履行结果相差如此之大呢?
$ python test.py no_pipelining: 2.3809118270874023 seconds; with_pipelining: 0.4370129108428955 seconds
由于这是连接本地的redis,所以网络开消非常小,固然,这里依然有一部份是网络开消影响,可是除此以外会不会还有其它影响因素呢? 答案是有,比如OS进程调度,当不使用管道时,Redis处理每一个命令之间是有时间空隙的,因此OS很有可能会将Redis进程转换为sleep状态, 然后运行其它程序,而使用pipelining时,可以提高CPU利用率,Redis空闲的时间没有那末多,因此,这也是pipelining速度会更快的 重要缘由之一。
ref:
https://redis.io/topics/pipelining
到此这篇关于为啥Redis使用pipelining会更快的文章就介绍到这了,更多相关Redis使用pipelining快内容请搜索之前的文章或继续浏览下面的相关文章希望大家以后多多支持!
文章来源:丸子建站
文章标题:为啥Redis使用pipelining会更快
https://www.wanzijz.com/view/65995.html