本文是对Redis 单节点,针对不同的数据类型,做插入行测试. 数据总条数为:10058624
环境说明:
Redis 未做任何优化, 单节点 (服务器上, 内存64G).
数据量 : 10058624条 (大约一千零6万条数据,本地机器运行读取插入操作.)
数据大小 : 1093.56MB (1.1G)
一. 确立读取空文件需要的时间:
处理数据完成 ==> 插入数据总条数 size : 10058624 total use : 23 s , 处理速度: 437331 条/s
二 . 传统方式插入, 插入数据类型为 String 类型:
代码:
处理数据中 ==> 插入数据总条数 size : 10000 total use : 5 s , 处理速度: 2000 条/s
处理数据中 ==> 插入数据总条数 size : 20000 total use : 9 s , 处理速度: 2222 条/s
处理数据中 ==> 插入数据总条数 size : 30000 total use : 12 s , 处理速度: 2500 条/s
处理数据中 ==> 插入数据总条数 size : 40000 total use : 15 s , 处理速度: 2666 条/s
处理数据中 ==> 插入数据总条数 size : 50000 total use : 19 s , 处理速度: 2631 条/s
处理数据中 ==> 插入数据总条数 size : 60000 total use : 22 s , 处理速度: 2727 条/s
处理数据中 ==> 插入数据总条数 size : 70000 total use : 26 s , 处理速度: 2692 条/s
处理数据中 ==> 插入数据总条数 size : 80000 total use : 29 s , 处理速度: 2758 条/s
处理数据中 ==> 插入数据总条数 size : 90000 total use : 33 s , 处理速度: 2727 条/s
处理数据中 ==> 插入数据总条数 size : 100000 total use : 36 s , 处理速度: 2777 条/s
处理数据中 ==> 插入数据总条数 size : 150000 total use : 54 s , 处理速度: 2777 条/s
处理数据中 ==> 插入数据总条数 size : 200000 total use : 71 s , 处理速度: 2816 条/s
假设插入速度为 2800条/s , 那么插入10058624 条数据需要用时: 3593秒 . ( 59.88 min , 约 1小时. )
算了,这个方法心碎到不行.......
三.Pipelining
代码:
处理数据中 ==> 插入数据总条数 size : 100000 total use : 3 s , 处理速度: 33333 条/s
处理数据中 ==> 插入数据总条数 size : 500000 total use : 6 s , 处理速度: 83333 条/s
处理数据中 ==> 插入数据总条数 size : 1000000 total use : 9 s , 处理速度: 111111 条/s
处理数据中 ==> 插入数据总条数 size : 1500000 total use : 12 s , 处理速度: 125000 条/s
处理数据中 ==> 插入数据总条数 size : 2000000 total use : 14 s , 处理速度: 142857 条/s
处理数据中 ==> 插入数据总条数 size : 3000000 total use : 20 s , 处理速度: 150000 条/s
处理数据中 ==> 插入数据总条数 size : 4000000 total use : 25 s , 处理速度: 160000 条/s
处理数据中 ==> 插入数据总条数 size : 5000000 total use : 30 s , 处理速度: 166666 条/s
处理数据中 ==> 插入数据总条数 size : 6000000 total use : 35 s , 处理速度: 171428 条/s
处理数据中 ==> 插入数据总条数 size : 7000000 total use : 40 s , 处理速度: 175000 条/s
处理数据中 ==> 插入数据总条数 size : 8000000 total use : 45 s , 处理速度: 177777 条/s
处理数据中 ==> 插入数据总条数 size : 9000000 total use : 51 s , 处理速度: 176470 条/s
处理数据中 ==> 插入数据总条数 size : 10000000 total use : 57 s , 处理速度: 175438 条/s
处理数据完成 ==> 插入数据总条数 size : 10058624 total use : 62 s , 处理速度: 162235 条/s
和传统方式相比,性能差将近58 倍!!!!!!!!
====================== 读取操作 ==================================================
传统方式:
处理数据中 ==> 读取数据总条数 size : 10000 total use : 2 s , 处理速度: 5000 条/s
处理数据中 ==> 读取数据总条数 size : 20000 total use : 4 s , 处理速度: 5000 条/s
处理数据中 ==> 读取数据总条数 size : 30000 total use : 6 s , 处理速度: 5000 条/s
处理数据中 ==> 读取数据总条数 size : 40000 total use : 8 s , 处理速度: 5000 条/s
处理数据中 ==> 读取数据总条数 size : 50000 total use : 10 s , 处理速度: 5000 条/s
处理数据中 ==> 读取数据总条数 size : 60000 total use : 12 s , 处理速度: 5000 条/s
处理数据中 ==> 读取数据总条数 size : 70000 total use : 15 s , 处理速度: 4666 条/s
处理数据中 ==> 读取数据总条数 size : 80000 total use : 17 s , 处理速度: 4705 条/s
处理数据中 ==> 读取数据总条数 size : 90000 total use : 19 s , 处理速度: 4736 条/s
处理数据中 ==> 读取数据总条数 size : 100000 total use : 21 s , 处理速度: 4761 条/s
处理数据中 ==> 读取数据总条数 size : 200000 total use : 40 s , 处理速度: 5000 条/s
处理数据中 ==> 读取数据总条数 size : 300000 total use : 61 s , 处理速度: 4918 条/s
处理数据中 ==> 读取数据总条数 size : 400000 total use : 83 s , 处理速度: 4819 条/s
假设插入速度为 5000条/s , 那么插入10058624 条数据需要用时: 2012 秒 . ( 33min 30 s . )
采用 pipline 读取数据
处理数据中 ==> 读取数据总条数 size : 1000000 total use : 2 s , 处理速度: 500000 条/s
处理数据中 ==> 读取数据总条数 size : 2000000 total use : 3 s , 处理速度: 666666 条/s
处理数据中 ==> 读取数据总条数 size : 3000000 total use : 4 s , 处理速度: 750000 条/s
处理数据中 ==> 读取数据总条数 size : 4000000 total use : 5 s , 处理速度: 800000 条/s
处理数据中 ==> 读取数据总条数 size : 5000000 total use : 10 s , 处理速度: 500000 条/s
处理数据中 ==> 读取数据总条数 size : 6000000 total use : 11 s , 处理速度: 545454 条/s
处理数据中 ==> 读取数据总条数 size : 7000000 total use : 12 s , 处理速度: 583333 条/s
处理数据中 ==> 读取数据总条数 size : 8000000 total use : 17 s , 处理速度: 470588 条/s
处理数据中 ==> 读取数据总条数 size : 9000000 total use : 23 s , 处理速度: 391304 条/s
处理数据中 ==> 读取数据总条数 size : 10000000 total use : 24 s , 处理速度: 416666 条/s
由于是异步操作, 所以上面的结果并不准.最终获取数据时间:
batchGetUsePipeline : 处理数据完成 ==> 读取数据总条数 size : 10058623 total use : 48 s , 处理速度: 209554 条/s
和传统方式相比,性能差将近 41.92 倍!!!!!!!!
二 . 传统方式插入, 插入数据类型为 List 类型:
============== lpush 和 rpush 测评 start ============================================
背景:
lpush 和 rpush 测评 添加相同数据100万条.
lpush:
处理数据中 ==> 插入数据总条数 size : 10000 total use : 4 s , 处理速度: 2500 条/s
处理数据中 ==> 插入数据总条数 size : 20000 total use : 8 s , 处理速度: 2500 条/s
处理数据中 ==> 插入数据总条数 size : 30000 total use : 11 s , 处理速度: 2727 条/s
处理数据中 ==> 插入数据总条数 size : 40000 total use : 15 s , 处理速度: 2666 条/s
处理数据中 ==> 插入数据总条数 size : 50000 total use : 18 s , 处理速度: 2777 条/s
处理数据中 ==> 插入数据总条数 size : 60000 total use : 22 s , 处理速度: 2727 条/s
处理数据中 ==> 插入数据总条数 size : 70000 total use : 27 s , 处理速度: 2592 条/s
处理数据中 ==> 插入数据总条数 size : 80000 total use : 31 s , 处理速度: 2580 条/s
处理数据中 ==> 插入数据总条数 size : 90000 total use : 34 s , 处理速度: 2647 条/s
处理数据中 ==> 插入数据总条数 size : 100000 total use : 38 s , 处理速度: 2631 条/s
处理数据中 ==> 插入数据总条数 size : 200000 total use : 78 s , 处理速度: 2564 条/s
处理数据中 ==> 插入数据总条数 size : 300000 total use : 117 s , 处理速度: 2564 条/s
处理数据中 ==> 插入数据总条数 size : 400000 total use : 158 s , 处理速度: 2531 条/s
处理数据中 ==> 插入数据总条数 size : 500000 total use : 200 s , 处理速度: 2500 条/s
处理数据中 ==> 插入数据总条数 size : 600000 total use : 244 s , 处理速度: 2459 条/s
处理数据中 ==> 插入数据总条数 size : 700000 total use : 286 s , 处理速度: 2447 条/s
处理数据中 ==> 插入数据总条数 size : 800000 total use : 327 s , 处理速度: 2446 条/s
处理数据中 ==> 插入数据总条数 size : 990000 total use : 401 s , 处理速度: 2468 条/s
处理数据中 ==> 插入数据总条数 size : 1000000 total use : 405 s , 处理速度: 2469 条/s
处理数据完成 ==> 插入数据总条数 size : 1000000 total use : 405 s , 处理速度: 2469 条/s
rpush :
处理数据中 ==> 插入数据总条数 size : 10000 total use : 5 s , 处理速度: 2000 条/s
处理数据中 ==> 插入数据总条数 size : 20000 total use : 9 s , 处理速度: 2222 条/s
处理数据中 ==> 插入数据总条数 size : 30000 total use : 13 s , 处理速度: 2307 条/s
处理数据中 ==> 插入数据总条数 size : 40000 total use : 18 s , 处理速度: 2222 条/s
处理数据中 ==> 插入数据总条数 size : 50000 total use : 22 s , 处理速度: 2272 条/s
处理数据中 ==> 插入数据总条数 size : 60000 total use : 26 s , 处理速度: 2307 条/s
处理数据中 ==> 插入数据总条数 size : 70000 total use : 30 s , 处理速度: 2333 条/s
处理数据中 ==> 插入数据总条数 size : 80000 total use : 34 s , 处理速度: 2352 条/s
处理数据中 ==> 插入数据总条数 size : 90000 total use : 38 s , 处理速度: 2368 条/s
处理数据中 ==> 插入数据总条数 size : 100000 total use : 42 s , 处理速度: 2380 条/s
处理数据中 ==> 插入数据总条数 size : 200000 total use : 81 s , 处理速度: 2469 条/s
处理数据中 ==> 插入数据总条数 size : 300000 total use : 122 s , 处理速度: 2459 条/s
处理数据中 ==> 插入数据总条数 size : 400000 total use : 161 s , 处理速度: 2484 条/s
处理数据中 ==> 插入数据总条数 size : 500000 total use : 200 s , 处理速度: 2500 条/s
处理数据中 ==> 插入数据总条数 size : 600000 total use : 239 s , 处理速度: 2510 条/s
处理数据中 ==> 插入数据总条数 size : 700000 total use : 278 s , 处理速度: 2517 条/s
处理数据中 ==> 插入数据总条数 size : 800000 total use : 316 s , 处理速度: 2531 条/s
处理数据中 ==> 插入数据总条数 size : 890000 total use : 354 s , 处理速度: 2514 条/s
处理数据中 ==> 插入数据总条数 size : 900000 total use : 360 s , 处理速度: 2500 条/s
处理数据中 ==> 插入数据总条数 size : 1000000 total use : 404 s , 处理速度: 2475 条/s
处理数据完成 ==> 插入数据总条数 size : 1000000 total use : 404 s , 处理速度: 2475 条/s
总结: 两种方式, 插入效率差不多, lpush 会快1秒,也没啥太大区别
============== lpush 和 rpush 测评 end ============================================
步入正题,开始测试
普通写入操作:
处理数据中 ==> 插入数据总条数 size : 10000 total use : 4 s , 处理速度: 2500 条/s
处理数据中 ==> 插入数据总条数 size : 20000 total use : 8 s , 处理速度: 2500 条/s
处理数据中 ==> 插入数据总条数 size : 30000 total use : 11 s , 处理速度: 2727 条/s
处理数据中 ==> 插入数据总条数 size : 40000 total use : 15 s , 处理速度: 2666 条/s
处理数据中 ==> 插入数据总条数 size : 50000 total use : 18 s , 处理速度: 2777 条/s
处理数据中 ==> 插入数据总条数 size : 60000 total use : 22 s , 处理速度: 2727 条/s
处理数据中 ==> 插入数据总条数 size : 70000 total use : 27 s , 处理速度: 2592 条/s
处理数据中 ==> 插入数据总条数 size : 80000 total use : 31 s , 处理速度: 2580 条/s
处理数据中 ==> 插入数据总条数 size : 90000 total use : 34 s , 处理速度: 2647 条/s
处理数据中 ==> 插入数据总条数 size : 100000 total use : 38 s , 处理速度: 2631 条/s
处理数据中 ==> 插入数据总条数 size : 200000 total use : 78 s , 处理速度: 2564 条/s
处理数据中 ==> 插入数据总条数 size : 300000 total use : 117 s , 处理速度: 2564 条/s
处理数据中 ==> 插入数据总条数 size : 400000 total use : 158 s , 处理速度: 2531 条/s
处理数据中 ==> 插入数据总条数 size : 500000 total use : 200 s , 处理速度: 2500 条/s
处理数据中 ==> 插入数据总条数 size : 600000 total use : 244 s , 处理速度: 2459 条/s
处理数据中 ==> 插入数据总条数 size : 700000 total use : 286 s , 处理速度: 2447 条/s
处理数据中 ==> 插入数据总条数 size : 800000 total use : 327 s , 处理速度: 2446 条/s
处理数据中 ==> 插入数据总条数 size : 990000 total use : 401 s , 处理速度: 2468 条/s
处理数据中 ==> 插入数据总条数 size : 1000000 total use : 405 s , 处理速度: 2469 条/s
假设插入速度为 2600条/s , 那么插入10058624 条数据需要用时: 3869 秒 . ( 64.5 min , 约 1小时零5分钟. )
pipeline 写入:
处理数据中 ==> 插入数据总条数 size : 100000 total use : 2 s , 处理速度: 50000 条/s
处理数据中 ==> 插入数据总条数 size : 200000 total use : 3 s , 处理速度: 66666 条/s
处理数据中 ==> 插入数据总条数 size : 300000 total use : 4 s , 处理速度: 75000 条/s
处理数据中 ==> 插入数据总条数 size : 400000 total use : 4 s , 处理速度: 100000 条/s
处理数据中 ==> 插入数据总条数 size : 500000 total use : 5 s , 处理速度: 100000 条/s
处理数据中 ==> 插入数据总条数 size : 600000 total use : 5 s , 处理速度: 120000 条/s
处理数据中 ==> 插入数据总条数 size : 700000 total use : 6 s , 处理速度: 116666 条/s
处理数据中 ==> 插入数据总条数 size : 800000 total use : 6 s , 处理速度: 133333 条/s
处理数据中 ==> 插入数据总条数 size : 900000 total use : 7 s , 处理速度: 128571 条/s
处理数据中 ==> 插入数据总条数 size : 1000000 total use : 7 s , 处理速度: 142857 条/s
处理数据中 ==> 插入数据总条数 size : 2000000 total use : 13 s , 处理速度: 153846 条/s
处理数据中 ==> 插入数据总条数 size : 3000000 total use : 20 s , 处理速度: 150000 条/s
处理数据中 ==> 插入数据总条数 size : 4000000 total use : 24 s , 处理速度: 166666 条/s
处理数据中 ==> 插入数据总条数 size : 5000000 total use : 31 s , 处理速度: 161290 条/s
处理数据中 ==> 插入数据总条数 size : 6000000 total use : 38 s , 处理速度: 157894 条/s
处理数据中 ==> 插入数据总条数 size : 7000000 total use : 42 s , 处理速度: 166666 条/s
处理数据中 ==> 插入数据总条数 size : 8000000 total use : 47 s , 处理速度: 170212 条/s
处理数据中 ==> 插入数据总条数 size : 9000000 total use : 55 s , 处理速度: 163636 条/s
处理数据中 ==> 插入数据总条数 size : 10000000 total use : 61 s , 处理速度: 163934 条/s
处理数据完成 ==> 插入数据总条数 size : 10058624 total use : 62 s , 处理速度: 162235 条/s
和传统方式对比 性能相差 62.5倍.
读取操作:
传统读取(一次读所有, 内存要大啊, 我这已经调整到 9G 了):
读取数据总条数 size : 10058624 total use : 15 s , 处理速度: 670574 条/s
采用 pipline 方式:
处理数据完成 ==> 读取数据总条数 size : 10058624 total use : 12 s , 处理速度: 838218 条/s
pipline的数据读取方式确实会快很多, 但是内存存在消耗.
本文先到这里,有疑问或者什么不正确的地方,欢迎指正..................