Redis 单节点千万级别数据 写入,读取 性能测试.

 

本文是对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的数据读取方式确实会快很多, 但是内存存在消耗.

 

 

本文先到这里,有疑问或者什么不正确的地方,欢迎指正..................

 

 

 

  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值