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交互
相关推荐
在单个或聚合连接中支持命令管道;(Command pipelining on single and aggregated connections) 能够通过TCP IP或者Unix domain sockets连接到redis 支持持久连接; 自动连接Redis实例 使用“懒惰”方式 只在第一...
redis-wstream redis-wstream是一个node.... 通过管道传输到此实例,并在发出end时将流保存到redis。 var redis = require ( 'redis' ) ;var redisWStream = require ( 'redis-wstream' ) ; // factoryvar client = re
scrapy爬虫框架课程,包含全部课件与代码课程纲要:1.scrapy的概念作用和工作流程2.scrapy的入门使用3.scrapy构造并发送请求4.scrapy模拟登陆5.scrapy管道的使用6.scrapy中间件的使用7.scrapy_redis概念作用和流程8....
StackExchange.Redis这里使用管道和多路复用的技术来实现减少连接,这里后续展开再讨论。当作消息代理中间件使用消息组建中,重要的概念便是生产者,消费者,消息中间件。ISubscriber sub = redis.GetSubscriber(); ...
5.scrapy管道的使用 6.scrapy中间件的使用 7.scrapy_redis概念作用和流程 8.scrapy_redis原理分析并实现断点续爬以及分布式爬虫 9.scrapy_splash组件的使用 10.scrapy的日志信息与配置 11.scrapyd部署scrapy项目 12....
前言 Redis服务是一种C/S模型,提供请求-响应式协议的TCP服务,所以当客户端...以下是对 Redis管道机制的一个学习记录 Pipeline简介 Redis客户端执行一条命令: 发送命令 命令排队 执行命令 返回结果 其中发
用途您可以通过gzip通过管道传输输出并将其发送到文件,以进行快速的非redis数据备份或导出/迁移到另一个系统。 例如: ./redis_to_json.py | gzip > redis_backup.json.gz这对于您正在使用但又不想丢失数据的应用...
25、Redis 中的管道有什么用? 26、怎么理解 Redis 事务? 27、Redis 事务相关的命令有哪几个? 28、Redis key 的过期时间和永久有效分别怎么设置? 29、Redis 如何做内存优化? 30、Redis 回收进程如何工作的? 31...
redis所需jar包
25、Redis 中的管道有什么用? 26、怎么理解 Redis 事务? 27、Redis 事务相关的命令有哪几个? 28、Redis key 的过期时间和永久有效分别怎么设置? 29、Redis 如何做内存优化? 30、Redis 回收进程如何工作的?
Redis 简介 Redis 安装 Redis 配置 Redis 命令 Redis 键 Redis 字符串 Redis 哈希 Redis 列表 Redis 集合(有序集合) Redis HyperLogLog ...Redis 管道技术 Redis 分区 Java使用Redis Php 使用Redis
Redis协议 python实现的Redis协议 免费软件:BSD 许可证 文档: : 。 用法 这是按照实现的。 我在我的项目中使用过它。...将 redis 协议流解析为 redis 命令,例如 redis 管道请求或原始响应。 >>> from redis_proto
以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...
以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...
以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...
队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的方式介绍了 PHP、Ruby、Python和Node.js这4种语言的Redis客户端库的使用方法。 本书的目标读者不仅包括Redis的新手,还包括那些己经掌握...
以通俗易懂的方式介绍了Redis基础与实践方面的知识,包括历史与特性、在开发和生产环境中部署运行Redis、数据类型与命令、使用Redis实现队列、事务、复制、管道、持久化、优化Redis存储空间等内容,并采用任务驱动的...
pdns_redis.py 这是PowerDNS和Redis之间的Python胶合层。 它知道如何作为PowerDNS管道后端运行,以回复任意查询。 它还知道如何作为命令行工具运行,以在Redis中添加和删除DNS记录。 有关更多文档,请查阅源代码(或...