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

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来做

相关推荐

    Redis实战_Redis实战中文完整版_Redis快速入门_Redis数据类型及操作_Redis常用

    3. **Redis命令操作**:书中会详细介绍每种数据类型的命令,如`SET`、`GET`、`HSET`、`LPOP`、`SADD`、`ZADD`等,以及事务(Transaction)、管道(Pipeline)等高级操作。 4. **Redis持久化**:为了防止数据丢失,...

    csredisv3.4.1_redis_c#redissetnx_REDISC#_C#redis_c#redis封装_

    此外,还有事务(Transaction)、发布/订阅(Pub/Sub)和管道(Pipeline)等功能。 在使用CSRedis时,需要注意连接池管理,以提高性能和资源利用率。可以配置最大连接数、最小空闲连接数等参数。同时,异常处理也是...

    a-nnotated_redis_source

    Redis 作为消息队列,主要通过发布/订阅(Publish/Subscribe)和管道(Pipeline)机制实现。了解这部分源码有助于构建基于 Redis 的实时通信系统。 10. Redis 性能优化 Redis 源码中包含了各种性能优化技巧,如...

    python3开发django项目安装和使用redis教程

    该库提供了完整的 Redis 命令支持,并且支持管道操作、事务和发布/订阅等高级功能。 ##### 3.1 安装 `redis-py` 使用 pip 安装 `redis-py`: ```bash pip install redis ``` ##### 3.2 基本用法 示例代码展示...

    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-redis-master_scrapy-redis_juzi1122_scrapy_

    Scrapy-Redis是一个基于Scrapy的分布式爬虫框架,它扩展了Scrapy的功能,使其能够处理大规模的网络抓取任务。Scrapy是一个流行的Python爬虫框架,而Scrapy-Redis则是将其与Redis数据库结合,利用Redis作为数据队列,...

    redis_client_拓展

    - `pipeline()`: 创建管道,批量执行命令以提高性能。 - `keys(pattern)`: 根据模式匹配查找所有键。 - `ttl(key)`: 获取键的剩余生存时间(TTL),单位为秒。 在实际项目中,RedisClient常用于缓存高访问量的...

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

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

    java大数据作业_8Redis、Thrift、Hadoop2

    使用Jedis通过管道(Pipeline)批量执行Redis命令可以有效提高性能: ```java import redis.clients.jedis.Jedis; public class JedisPipelineExample { public static void main(String[] args) { Jedis jedis = ...

    redis2-nginx-module-0.15

    - **管道**:使用 Redis 的 Pipeline 技术,批量发送命令,减少网络延迟。 3. **配置使用** 在 NGINX 的配置文件中,通过 `set $redis_key "your_key"` 设置键名,然后使用 `redis2_query` 指令执行 Redis 命令。...

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

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

    redis-cpp:redis-cpp是C ++ 17中用于Redis(和C ++ 11反向移植)的仅标头库

    redis-cpp是一个C ++ 17库,用于执行Redis并支持管道和发布/订阅模式。 此外,您可以使用自己的流实现扩展该库以与Redis通信。 您也可以像RESP序列化程序(纯核)一样使用它。 您只需要知道几个功能即可开始使用...

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

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

    bigdata_10_redis:Jedis相关API的练习

    Redis是一种高性能的键值对数据存储系统,常用于缓存、消息队列和数据库功能。在Java中,Jedis是连接Redis服务器最常用的客户端库,提供了丰富的API来操作Redis的各种数据结构。本篇将深入探讨Jedis相关API的使用,...

    Python如何操作docker redis过程解析

    首先,`subprocess`是Python的一个内置模块,它用于生成新的进程、连接到它们的输入/输出/错误管道,并获取它们的返回码。在本案例中,`subprocess.Popen`被用来执行Docker命令,从而与Redis交互。`Popen`函数接收一...

    redis所需jar包

    Redis是一款高性能的键值对数据存储系统,常用于缓存、消息队列和数据库功能。在Java开发中,为了与Redis交互,我们需要依赖相应的Java库,即Jedis。标题和描述提到的“redis所需jar包”就是指这些用于Java编程与...

    redis2json:以JSON格式导出Redis数据

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

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

    Redis管道(Pipeline)机制是Redis为了优化客户端与服务器之间的通信效率而设计的一种技术。传统的请求-响应模式下,客户端每发送一个命令,都需要等待服务器的响应,这种方式在处理大量连续命令时会导致显著的延迟...

Global site tag (gtag.js) - Google Analytics