zoukankan      html  css  js  c++  java
  • Redis实战--使用Jedis实现百万数据秒级插入

    echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!!


    当我们使用普通方法插入大量数据到Redis的时候,我们发现,我们的插入数据并没有Redis宣传的那么快,号称有10w吞吐量的Redis为什么会在我们插入大量的数据的时候很慢呢?这就是本文要做说明的地方

    10w吞吐量,大量插入没有得到体现?

    Redis号称有10w的吞吐量,但是我们使用普通方法插入的时候,我们发现并没有达到这样的数据,主要原因是我们插入的时候多次连接操作,创建连接需要时间,同时,一个连接就会由一个数据包,多个数据包的传送网络并不能保证一致,这些都是影响我们大量数据插入性能的。

    怎么样实现打完数据秒级插入?

    使用Pipeline

    实现代码如下:

    // 在pom依赖中添加jedis依赖
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>
    
    // 使用jedis实现pipeline调用
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.222.135", 6379);
        Pipeline pipeline = jedis.pipelined();
        long startTime = System.currentTimeMillis();
        IntStream.range(0, 1000000).forEach(it -> pipeline.set("batch" + it, it + ""));
        pipeline.syncAndReturnAll();
        long endTime = System.currentTimeMillis();
        System.out.println(endTime - startTime);
    }
    

    实测插入速度如下:

    在这里插入图片描述

    实现原理

    pipeline其实就是在我们的操作中节省了很多的I/O操作,将我们多个get或者set操作的I/O操作变成一个I/O操作,节省了很多的I/O时间。同时,让我们的网络影响I/O数据包传输的问题减到最小。

    注意

    如果我们的redis有密码,那么我们上面的代码需要加一行设置密码

    jedis.auth("密码");
    

    做一个有底线的博客主

  • 相关阅读:
    20180925-5代码规范
    20180925-4 单元测试,结对
    20180925-6 四则运算试题生成
    20180925-3 效能分析
    20170925-2 功能测试
    20180925-7 规格说明书——吉林市两日游
    20180918-1 词频统计
    第二周例行报告
    iOS开发-CocoaPods使用详细说明
    svn的使用详解
  • 原文地址:https://www.cnblogs.com/xlecho/p/11886881.html
Copyright © 2011-2022 走看看