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("密码");

做一个有底线的博客主

最新文章

  1. CLR线程概览(一)
  2. node socket.io web
  3. 第二章 第二个spring-boot程序(转载)
  4. 利用Windows自带的Certutil查看文件MD5
  5. SQL Server附加数据库文件出错
  6. ASP.NET验证控件RegularExpressionValidator的常见表达式
  7. 配置 dovecat 的 PAM
  8. SCOM2007R2安装和报表服务器配置
  9. vue2购物车ch4-(筛选v-for 点击的那个设置样式 设为默认地址其他 联动 非循环的列表选中和非选中 删除当前选中的列表)
  10. P1040 加分二叉树
  11. scala(二) Future执行逻辑解读
  12. Kotlin封装RxJava与Retrofit
  13. EF之Code First代码优先
  14. Java 工厂模式(一)— 简单工厂模式
  15. 2星|《重新定义物流》:形式像PPT,内容像公关稿
  16. 关于几天来研究使用css3动画的一点总结
  17. 搜索jar包 出现很多 Artifact Id相同 但Group Id不同 的包
  18. 一个隐蔽的C语言问题反思
  19. Linux 防火墙iptables开放特定端口
  20. 『编程题全队』Alpha 阶段冲刺博客Day6

热门文章

  1. 怎么将ETL技术落地
  2. sublime text插件emmet自定义模板
  3. Redis高级应用解析:缓存穿透、击穿、雪崩
  4. Cocos2d-x 学习笔记(8) ActionManager
  5. 基于华为物联网IOT的应用开发 --- 基于.net 的SDK封装
  6. std::multimap
  7. MS09-012 PR提权
  8. shell基本运算符(五)
  9. [UWP]组合CompositionBrush并使用BlendEffect
  10. PAT-1022 Digital Library (30 分) 字符串处理