`
y806839048
  • 浏览: 1126207 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

redis Pipeliningz批处理节约时间

阅读更多

管道就是批处理命令,防止每条命令---请求一次tcp连接,返回一次tcp这样消耗大,管道就是把所有的命令打包发给redise服务端,统一处理之后统一返回,

所以不能以前面返回的作为操作对象

 

 

 

 

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

Client: INCR X
Server: 1
Client: INCR X
Server: 2
Client: INCR X
Server: 3
Client: INCR X
Server: 4

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

Client: INCR X
Client: INCR X
Client: INCR X
Client: INCR X
Server: 1
Server: 2
Server: 3
Server: 4

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

package com.jd.redis.client;

 

import redis.clients.jedis.Jedis;

import redis.clients.jedis.Pipeline;

 

publicclass PipelineTest {

 

    /**

     * @param args

     */

    publicstaticvoid main(String[] args) {

       

        int count = 1000;

       

        long start = System.currentTimeMillis();

        withoutPipeline(count);

        long end = System.currentTimeMillis();

        System.out.println("withoutPipeline: " + (end-start));

       

        start = System.currentTimeMillis();

        usePipeline(count);

        end = System.currentTimeMillis();

        System.out.println("usePipeline: " + (end-start));

       

    }

 

    privatestaticvoid withoutPipeline(int count){

        Jedis jr = null;

        try {

            jr = new Jedis("10.10.224.44", 6379);

            for(int i =0; i<count; i++){

                jr.incr("testKey1");

            }

        catch (Exception e) {

            e.printStackTrace();

        }

        finally{

            if(jr!=null){

                jr.disconnect();

            }

        }

    }

   

    privatestaticvoid usePipeline(int count){

        Jedis jr = null;

        try {

            jr = new Jedis("10.10.224.44", 6379);

            Pipeline pl = jr.pipelined();

            for(int i =0; i<count; i++){

                 pl.incr("testKey2");

            }

                pl.sync();

        catch (Exception e) {

            e.printStackTrace();

        }

        finally{

            if(jr!=null){

                jr.disconnect();

            }

        }

    }

}

输出:

withoutPipeline: 11341

usePipeline: 344

测试结果还是很明显有较大的差距,所以多次操作用pipeline还是有明显的优势。我用的是Win7中的Jedis Java客户端程序连接局域网的Linux虚拟机上的Redis Server

分享到:
评论

相关推荐

    redis集群批处理一键搭建

    Redis集群批处理一键搭建是指通过一个简单的批处理脚本来快速构建和配置四个节点的Redis集群。这种方式极大地简化了安装和部署过程,使得在64位操作系统上启用Redis集群变得更加便捷。Redis是一个开源的、高性能的...

    Windows下 redis 注册服务 启动 关闭 批处理 bat

    在Windows操作系统中,为了方便管理和操作Redis,我们可以创建批处理脚本来实现Redis服务的注册、启动和关闭。批处理文件(BAT)是一种文本文件,包含了DOS或Windows命令行接口下的命令序列,可以一次性执行多个命令...

    redis批处理.bat脚本

    redis批处理.bat脚本

    redis在win上的运行脚本redis.bat

    标题提到的"redis在win上的运行脚本redis.bat"就是一个帮助用户在Windows环境下启动Redis服务的批处理文件。下面将详细介绍Redis在Windows上的安装、配置以及使用这个批处理脚本的方法。 首先,我们需要下载Redis的...

    redis-64.3.0.503 64位redis安装文件,直接运行批处理安装

    本资源为Redis的64位版本,版本号为3.0.503,针对Windows操作系统设计,提供了便捷的批处理安装和卸载功能。 首先,Redis的核心特性包括: 1. **高速度**:Redis基于内存存储,读写速度极快,是NoSQL数据库中的佼佼...

    Windows版 Redis 5.0.14

    - `redis-start.bat`是一个批处理文件,用于启动Redis服务器。通过编辑这个文件,用户可以自定义启动参数,如指定配置文件路径或端口号。 - 安装Redis时,需要将`redis-server.exe`注册为Windows服务,使用命令行...

    redis win x64位 及 安装卸载RedisServer服务

    3. 创建服务:在Windows环境中,可以使用批处理脚本来创建Redis服务。例如,`02.安装RedisServer服务.bat`可能包含了以下命令: ``` sc create RedisServer binPath= "C:\path\to\redis-server.exe --service-run ...

    Windows一键配置启动redis,停止redis

    4. **启动Redis服务**: 使用提供的`一键启动登录redis.bat`批处理文件,它会自动运行Redis服务器。这个批处理文件简化了启动过程,只需双击即可启动Redis服务。批处理文件可能包含了启动`redis-server.exe`命令,并...

    redis 和 redis 可视化工具

    双击运行这个批处理文件,Redis 就会在后台运行。值得注意的是,Redis 的默认配置下,它的服务器进程会与启动它的终端窗口绑定,所以如果关闭了该窗口,Redis 服务也会随之停止。为了避免这种情况,用户可以考虑将 ...

    Redis-windows可直接运行文件

    RDB在指定时间间隔或触发条件时保存数据库状态,而AOF记录每次写操作,保证数据安全。根据应用场景,可以选择合适的持久化策略。 最后,Redis的高可用性可以通过主从复制、哨兵系统和Cluster集群来实现。主从复制...

    REDIS_redis的工具包_redisinlabview_labviewredis_labview调用redis_redis

    1. **连接Redis服务器**:首先,需要创建一个连接到Redis服务器的VI,这通常涉及到设置服务器地址、端口号、超时时间等参数。 2. **执行命令**:连接成功后,可以选择相应的VI来执行Redis命令,如`SET`(设置键值)...

    redis-7.2-x64-for-windows-bin.zip

    10. **redis-benchmark.exe**: 这是Redis的性能测试工具,可以用来衡量Redis服务器的吞吐量和响应时间,帮助优化配置和硬件选择。 11. **data**: 这个目录可能包含Redis默认的数据存储位置,用户可以将Redis的数据...

    redis-7.0.11-windows.zip

    7. **redis-benchmark.exe**:这是一个性能测试工具,用于测量 Redis 服务器的吞吐量和响应时间。这有助于评估 Redis 在特定硬件和网络条件下的性能。 8. **LICENSE**:包含 Redis 的开源许可信息,这里是 BSD 许可...

    Windows 10的.bat 批处理文件脚本打开程序员的开发工具脚本源码,一键打开IDEA,Nacos,Redis等

    通过在批处理脚本中调用IDEA的可执行文件,可以快速启动这个IDE,节省了开发者手动打开的时间。 Nacos是阿里巴巴开源的一个动态配置服务和发现服务,适用于微服务架构。它可以帮助开发者集中管理和推送服务配置,...

    redis7.0.5 Windows版本

    Redis 7.0.5是该高性能键值存储系统的一个最新Windows版本,它在Linux和其他操作系统上广受...虽然操作方式与Linux环境有所不同,但借助提供的批处理文件和命令行工具,用户可以轻松地在Windows上搭建和管理Redis实例。

    java操作Redis缓存设置过期时间的方法

    Java 操作 Redis 缓存设置过期时间的方法 Java 操作 Redis 缓存设置过期时间是指在 Java 应用程序中使用 Redis 缓存时设置缓存项的过期时间,以便自动删除缓存项。下面将详细介绍 Java 操作 Redis 缓存设置过期...

    Redis-3.0.5windows.msi智能一键安装包

    4. **创建启动和停止脚本**:为了方便用户管理Redis服务,安装包可能会提供启动、停止Redis的批处理脚本,或者集成到系统服务管理中。 在解压后的文件"Redis-x64-3.0.501.msi"中,`x64`表示这是64位版本,`3.0.501`...

    redis 免安装 redis客户端 redis-desktop-manager-0.8.8.384

    对于开发者来说,这是一个高效且灵活的方法,特别是在测试和开发环境中,可以节省不少时间。 总的来说,Redis 的免安装版本以及配套的桌面管理工具为 Windows 用户提供了便捷的键值数据库服务和管理方式。理解 ...

    StackExchange.Redis .NET4.0

    9. **过期时间设置**:可以通过`ExpireAt`或`ExpireIn`方法为键设置过期时间,确保数据在一段时间后自动从Redis中移除。 10. **异常处理**:StackExchange.Redis会抛出适当的异常来表示操作失败,例如`...

    redis-5.0.4.tar.gz下载及redis安装过程

    redis安装 1: 下载redis-5.0.4.tar.gz 2: 解压源码并进入目录 tar zxvf redis-5.0.4.tar.gz cd redis-5.0.4 3: 不用configure 4: 直接make (如果是32位机器 make 32bit) 查看linux机器是32位还是64位的方法:...

Global site tag (gtag.js) - Google Analytics