Redis实战--使用Jedis实现百万数据秒级插入

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


当咱们使用普通方法插入大量数据到Redis的时候,咱们发现,咱们的插入数据并无Redis宣传的那么快,号称有10w吞吐量的Redis为何会在咱们插入大量的数据的时候很慢呢?这就是本文要作说明的地方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有密码,那么咱们上面的代码须要加一行设置密码code

jedis.auth("密码");

作一个有底线的博客主blog

相关文章
相关标签/搜索