`
zc985552943
  • 浏览: 287375 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Babe4ca6-5e6f-33aa-9078-762ee3ccfb7e
云计算--hadoop
浏览量:11490
5e98c2c1-2a82-3388-bc80-7fca0170bb12
redis解说
浏览量:26651
088014c7-4d3f-39ce-b72e-4ebe7046a134
MongoDB读书笔记
浏览量:15634
D2b74847-c860-3e26-96fe-3fa4498d6348
Maven读书笔记
浏览量:26695
688db20f-402d-3a1d-8188-d6153d6c7465
Java通信
浏览量:13406
社区版块
存档分类
最新评论

04_Redis管道

阅读更多

redis是一个cs模式的tcp server,使用和http类似的请求响应协议。一个client可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞并等待redis服务处理,redis处理完后请求命令后会将结果通过响应报文返回给client。基本的通信过程如下:

redis 127.0.0.1:6379> INCR i
(integer) 1
redis 127.0.0.1:6379> INCR i
(integer) 2
redis 127.0.0.1:6379> INCR i
(integer) 3
redis 127.0.0.1:6379> INCR i
(integer) 4

 基本上四个命令需要8个tcp报文才能完成。由于通信会有网络延迟,假如从client和server之间的包传输时间需要0.125秒。那么上面的四个命令8个报文至少会需要1秒才能完成。这样即使redis每秒能处理100个命令,而我们的client也只能一秒钟发出四个命令。这显示没有充分利用 redis的处理能力。除了可以利用mget,mset 之类的单条命令处理多个key的命令外我们还可以利用pipeline的方式从client打包多条命令一起发出,不需要等待单条命令的响应返回,而redis服务端会处理完多条命令后会将多条命令的处理结果打包到一起返回给客户端。通信过程如下:

redis 127.0.0.1:6379> INCR i
redis 127.0.0.1:6379> INCR i
redis 127.0.0.1:6379> INCR i
redis 127.0.0.1:6379> INCR i
(integer) 1
(integer) 2
(integer) 3
(integer) 4

 

假设不会因为tcp报文过长而被拆分。可能两个tcp报文就能完成四条命令,client可以将四个incr命令放到一个tcp报文一起发送,server则可以将四条命令的处理结果放到一个tcp报文返回。通过pipeline方式当有大批量的操作时候。我们可以节省很多原来浪费在网络延迟的时间。需要注意到是用 pipeline方式打包命令发送,redis必须在处理完所有命令前先缓存起所有命令的处理结果。打包的命令越多,缓存消耗内存也越多。所以并是不是打包的命令越多越好。具体多少合适需要根据具体情况测试。

总结:管道就是将客户端一系列的命名打包,然后再服务器端一次性执行,避免多次TCP交互

分享到:
评论
1 楼 josico 2014-06-18  
好像也没说 要怎么才能用pipeline来做

相关推荐

    phpredis-2.1.3.zip + Redis客户端介绍+ php调用Redis教程 +Redis相关方法说明

    在单个或聚合连接中支持命令管道;(Command pipelining on single and aggregated connections) 能够通过TCP IP或者Unix domain sockets连接到redis 支持持久连接; 自动连接Redis实例 使用“懒惰”方式 只在第一...

    redis-wstream:redis-wstream是一个node.js redis写入流,它使用现有的redis客户端(streams2)将二进制或utf8数据流式传输到redis密钥中。 用mranneynode_redis客户端测试

    redis-wstream redis-wstream是一个node.... 通过管道传输到此实例,并在发出end时将流保存到redis。 var redis = require ( 'redis' ) ;var redisWStream = require ( 'redis-wstream' ) ; // factoryvar client = re

    代码以及其他_scrapy爬虫框架课程_scrapy_

    scrapy爬虫框架课程,包含全部课件与代码课程纲要:1.scrapy的概念作用和工作流程2.scrapy的入门使用3.scrapy构造并发送请求4.scrapy模拟登陆5.scrapy管道的使用6.scrapy中间件的使用7.scrapy_redis概念作用和流程8....

    Redis的.net客户端StackExchange.Redis.zip

    StackExchange.Redis这里使用管道和多路复用的技术来实现减少连接,这里后续展开再讨论。当作消息代理中间件使用消息组建中,重要的概念便是生产者,消费者,消息中间件。ISubscriber sub = redis.GetSubscriber(); ...

    Python爬虫之路-scrapy爬虫框架课程

    5.scrapy管道的使用 6.scrapy中间件的使用 7.scrapy_redis概念作用和流程 8.scrapy_redis原理分析并实现断点续爬以及分布式爬虫 9.scrapy_splash组件的使用 10.scrapy的日志信息与配置 11.scrapyd部署scrapy项目 12....

    Redis基础学习之管道机制详析

    前言 Redis服务是一种C/S模型,提供请求-响应式协议的TCP服务,所以当客户端...以下是对 Redis管道机制的一个学习记录 Pipeline简介 Redis客户端执行一条命令: 发送命令 命令排队 执行命令 返回结果 其中发

    redis2json:以JSON格式导出Redis数据

    用途您可以通过gzip通过管道传输输出并将其发送到文件,以进行快速的非redis数据备份或导出/迁移到另一个系统。 例如: ./redis_to_json.py | gzip > redis_backup.json.gz这对于您正在使用但又不想丢失数据的应用...

    Redis面试题50道(含答案)_.pdf

    25、Redis 中的管道有什么用? 26、怎么理解 Redis 事务? 27、Redis 事务相关的命令有哪几个? 28、Redis key 的过期时间和永久有效分别怎么设置? 29、Redis 如何做内存优化? 30、Redis 回收进程如何工作的? 31...

    redis所需jar包

    redis所需jar包

    Redis面试专题30道.zip

    25、Redis 中的管道有什么用? 26、怎么理解 Redis 事务? 27、Redis 事务相关的命令有哪几个? 28、Redis key 的过期时间和永久有效分别怎么设置? 29、Redis 如何做内存优化? 30、Redis 回收进程如何工作的?

    redis 完整版教程(公司内部请某培训机构的教程)

    Redis 简介 Redis 安装 Redis 配置 Redis 命令 Redis 键 Redis 字符串 Redis 哈希 Redis 列表 Redis 集合(有序集合) Redis HyperLogLog ...Redis 管道技术 Redis 分区 Java使用Redis Php 使用Redis

    redis_protocol:python实现的Redis协议

    Redis协议 python实现的Redis协议 免费软件:BSD 许可证 文档: : 。 用法 这是按照实现的。 我在我的项目中使用过它。...将 redis 协议流解析为 redis 命令,例如 redis 管道请求或原始响应。 >>> from redis_proto

    redis入门指南2

    以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...

    redis入门指南

    以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...

    Redis入门指南

    以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...

    Redis入门指南 JB51 NET

    队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的方式介绍了 PHP、Ruby、Python和Node.js这4种语言的Redis客户端库的使用方法。 本书的目标读者不仅包括Redis的新手,还包括那些己经掌握...

    Redis入门指南(第2版)电子书

    以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...

    PyPdnsRedis:Redis支持的PowerDNS管道后端

    pdns_redis.py 这是PowerDNS和Redis之间的Python胶合层。 它知道如何作为PowerDNS管道后端运行,以回复任意查询。 它还知道如何作为命令行工具运行,以在Redis中添加和删除DNS记录。 有关更多文档,请查阅源代码(或...

Global site tag (gtag.js) - Google Analytics