zoukankan      html  css  js  c++  java
  • Redis管道

    介绍

    Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。客户端请求会遵循以下步骤:客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应并将结果返回给客户端。(补:阻塞?上一条请求结果没回来,就无法进行下一条请求。)

    客户端和服务器通过网络传输数据,一次请求响应时间单位时间称为RTT(往返时间)。如果客户端连续发出多个请求,是有性能影响的,即使服务处理得再快,RTT传输也大大影响响应的快慢(补:类比网购,发货很快,快递运输很慢)因此需要管道技术(pipeline)

    管道技术使得客户端即使没有读取旧的响应,也可以将多个请求发送到服务器,而无需等待回复,最后只需一步一步地读取应答。

    代码

    import  redis
    
    r = redis.StrictRedis(host='localhost',port=6379,db=0)
    # r.set('foo','bar')
    # print(r.get('foo'))
    
    pipeline = r.pipeline(transaction=False)
    pipeline.incr('a')
    pipeline.incr('b')
    pipeline.incr('c')
    pipeline.incr('d')
    pipeline.execute()
    
    
    print(r.get('a'),' ',r.get('b'),r.get('c'),' ',r.get('d'))
    

     结果

    Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
    runfile('E:/舒碧/项目/Redis_pipeline/redis_pipline.py', wdir='E:/舒碧/项目/Redis_pipeline')
    b'6' b'6' b'6' b'6'
    

    由于电脑环境原因、目前只能进行简单测试。

    深入了解

    开发管道技术原因:

    • 降低RTT的延迟成本(补:服务器明明可以处理更多,就是因为传输慢导致的请求少)
    • 改进Redis服务器上每秒执行的总操作数。为什么能改进呢?
      1、在不使用流水线操作的情况下,服务器read()和write()的系统调用过程中,上下文切换是很耗性能的。
      2、当使用管道时,通常单个read()系统调用可以读取许多命令,并通过单个write()系统调用递送多个回复。


     官网的Pipelining VS Scripting???待学习~

     参考链接:https://redis.io/topics/pipelining

  • 相关阅读:
    IsPostBack
    判断客户端.net版本
    js 汉字转换成拼音 转载
    观察者模式
    常用的js阻止冒泡的方法
    jquery中事件的绑定
    uclinux编译 skyeye运行
    dotNet学习之路 Struct与Class异同点
    dotNet学习之路 Delegate内部原理
    设计模式之旅(策略模式) 十号刚发工资的博友们,赶紧跟我一起算算你们的老板有没有给你少发工资。。。
  • 原文地址:https://www.cnblogs.com/bibi-feiniaoyuan/p/9381484.html
Copyright © 2011-2022 走看看